网络编程
位置:首页>> 网络编程>> Python编程>> Python socket如何实现服务端和客户端数据传输(TCP)

Python socket如何实现服务端和客户端数据传输(TCP)

作者:时光不写代码  发布时间:2023-08-25 01:02:43 

标签:socket,服务端,客户端,数据传输

socket服务端和客户端数据传输(TCP)

服务器端:

import socket
#创建一个socket对象
socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 9999
#绑定地址
socket_server.bind((host, port))
#设置监听
socket_server.listen(5)
# socket_server.accept()返回一个元组, 元素1为客户端的socket对象, 元素2为客户端的地址(ip地址,端口号)
client_socket, address = socket_server.accept()
#while循环是为了让对话持续
while True:
#接收客户端的请求
   recvmsg = client_socket.recv(1024)
   #把接收到的数据进行解码
   strData = recvmsg.decode("utf-8")
   #设置退出条件
   if strData == 'q':
       break
   print("接收: %s" % strData)
   #输入
   msg = input("发送: ")
   #发送数据,需要进行编码
   client_socket.send(msg.encode("utf-8"))
#关闭服务器端
socket_server.close()

客户端:

import socket
#创建一个socket对象
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 9999
#连接服务端
client.connect((host, port))
while True:
   send_msg = input("发送: ")
   #设置退出条件
   if send_msg == "q":
       break
   send_msg = send_msg
   #发送数据,编码
   client.send(send_msg.encode("utf-8"))
   #接收服务端返回的数据
   msg = client.recv(1024)
   #解码
   print("接收:%s", % msg.decode("utf-8"))
#关闭客户端
client.close()

流程图


Python socket如何实现服务端和客户端数据传输(TCP)

socket服务端,客户端互相通信

利用socket传递参数,把运行的程序与客户端结合,先启动服务端,再启动客户端。基础代码如下:

服务端代码

import socket
import time
print("服务端开启")
#创建套接字
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#设置IP和端口
#host = socket.gethostname()
host = '127.0.1.1'
port = 3333
#bind绑定该端口
mySocket.bind((host, port))
#监听
mySocket.listen(10)
while True:
   #接收客户端连接
   print("等待连接....")
   client, address = mySocket.accept()
   print("新连接")
   print("IP is %s" % address[0])
   print("port is %d\n" % address[1])
   while True:
       #发送消息
       msg = input("服务端发送:")
       client.send(msg.encode(encoding='utf-8'))
       print("发送完成")
       print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))#格式化时间戳为标准格式
       if msg == "EOF":
           break
       if msg == "quit":
           client.close()
           mySocket.close()
           print("程序结束\n")
           exit()

#读取消息
       msg = client.recv(1024)
       print("服务端接收:",msg.decode("utf-8"))#把接收到的数据进行解码
       print("读取完成")
       if msg == b"EOF":
           break
       if msg == b"quit":
           client.close()
           mySocket.close()
           print("程序结束\n")
           exit()

客户端代码:

import socket
print("客户端开启")
#创建套接字
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#设置ip和端口
#host = socket.gethostname()
host = '127.0.1.1'
port = 3333

try:
   mySocket.connect((host, port)) ##连接到服务器
   print("连接到服务器")
except :                           ##连接不成功,运行最初的ip
   print ('连接不成功')

while 1:
   #接收消息
   msg = mySocket.recv(1024)  
   print("客户端接收:%s" % msg.decode("utf-8"))#把接收到的数据进行解码
   print("读取完成")
   if msg == b"EOF":
       break
   if msg == b"quit":
       mySocket.close()
       print("程序结束\n")
       exit()

#发送消息
   msg = input("客户端发送:")
   mySocket.send(msg.encode(encoding='utf-8'))
   print("发送完成")
   if msg == "EOF":
       break
   if msg == "quit":
       mySocket.close()
       print("程序结束\n")
       exit()      
print("程序结束\n")

来源:https://blog.csdn.net/weixin_44649870/article/details/87367670

0
投稿

猜你喜欢

  • 1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建
  • 问题背景周一上班,首先向同事了解了一下上周的测试情况,被告知在多实例场景下 MySQL Server hang 住,无法测试下去,原生版本不
  • 本文研究的主要是Python中optparser库的相关内容,具体如下。一直以来对optparser不是特别的理解,今天就狠下心,静下心研究
  • 问题最近在使用 Vue 做东西,用到钉钉扫描登录的功能,这里需要引入远程的 js 文件,因为 Vue 的方式跟之前的不太一样,又不想把文件下
  • 在JavaScript中存在这样两种原始类型:Null与Undefined。这两种类型常常会使JavaScript的开发人员产生疑惑,在什么
  • 一、比较运算符和比较方法比较运算符用于判断是否相等和比较大小,Python中的比较运算符有==、!=、<、>、<=、>
  • 本文将和大家分享一些从互联网上爬取语料的经验。0x1 工具准备工欲善其事必先利其器,爬取语料的根基便是基于python。我们基于python
  • 1、查看当前所有连接的详细资料:./mysqladmin -uadmin -p -h10.140.1.1 processlist2、只查看当
  • FCKeditor至今已经到了2.3.1版本了,对于国内的WEB开发者来说,也基本上都已经“闻风知多少”了,很多人将其融放到自己的项目中,更
  • :hover是我们在CSS设计中最常运用的伪类之一,许多绚丽效果的实现离不开伪类:hover,比如我们常见的纯CSS菜单、相册效果等等。或许
  • 本文仅针对 Ubuntu 操作系统环境,其他系统环境待日后遇到再补充。本文主要内容参考Linux公社(https://www.linuxid
  • 拓扑排序几乎在所有的项目,甚至日常生活,待完成的不同任务之间通常都会存在着某些依赖关系,这些依赖关系会为它们的执行顺序行程表部分约束。对于这
  • 本文实例讲述了Python科学计算包numpy用法。分享给大家供大家参考,具体如下:1 数据结构numpy使用一种称为ndarray的类似M
  • 前言用python编程绘图,其实非常简单。中学生、大学生、研究生都能通过这10篇教程从入门到精通!快速绘制几种简单的柱状图。1垂直柱图(普通
  • 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
  • 先给大家展示下效果图,如果大家感觉还不错,请继续参考实现思路详解。布局1.左右各一半(col-md-6)2.左侧登录框占左侧一半的10/12
  • 前言python使用中多线程、多进程、多协程使用是比较常见的。那么如果在多线程等的使用,我们这个时候我们想从外部强制杀掉该线程请问如何操作?
  • Web设计师可以使用HTML4和CSS2.1完成一些很酷的东西。我们可以在不使用陈旧的基于table布局的基础上完成文档逻辑结构并创建内容丰
  • ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。E
  • 前言在java中,反斜杠“\”转义是“\”,因此表示一个“\”要使用“\\”,如果是正则表达式,那么表示一个“\”需要用“\\\\”,在my
手机版 网络编程 asp之家 www.aspxhome.com