上一篇:Python 技术篇-socket 套接字实现两个窗口间消息传递,TCP 实现
本篇介绍用 UDP 来实现。
socket 套接字实现服务器客户端消息传递有 UDP 和 TCP 两种形式。他们最主要的区别是:TCP 需要建立客户端与服务器的连接,UDP 不需要
建立 UDP 连接的 socket 对象:socket(AF_INET, SOCK_DGRAM)
。
UDP 接收数据:recvfrom(buf)
,返回值是客户端传的数据和客户端的地址,参数 buf 是缓冲区大小,比如 8 的话相当于 2 个中文,8 个英文或数字,一般设置 1024。
UDP 发送数据:sendto(data, addr)
,data 是字节 bytes 类型的数据,addr 是形如 (host, port)
端口号加地址的元组类型数据。
服务器端代码:
from socket import * host = "" # ip,服务器空ip代表本地; port = 7777 # 端口号; addr = (host, port) Socket_UDP = socket(AF_INET, SOCK_DGRAM) # 创建socket对象; Socket_UDP.bind(addr) # 服务器用bind绑定本地,也算是服务器的标识; print("Waitting...") while True: data, addr = Socket_UDP.recvfrom(128) # 缓冲区大小可以设置大一点 data = str(data, encoding = 'utf-8') # 将接收的字节类型数据转化为字符串类型; print("来自" + str(addr) + "发来的消息: " + data) if data == "exit": break Socket_UDP.close() # 关闭socket对象;
客户端代码:
from socket import * host = "127.0.0.1" # 服务器的地址,因为服务器也在本地,所以填本地地址了 port = 7777 # 端口号要与服务器一致 addr = (host, port) Socket_UDP = socket(AF_INET, SOCK_DGRAM) while True: data = input("向服务器发送消息: ") data = bytes(data, encoding = 'utf-8') # 因为input返回的是字符串类型的数据,data需要字节类型的数据 Socket_UDP.sendto(data, addr) if data == "exit": break Socket_UDP.close()
服务器窗口截图:
客户端窗口截图:
喜欢的点个赞❤吧!