Python 技术篇-socket套接字实现服务器客户端消息传递,UDP实现

上一篇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()

服务器窗口截图:
Python 技术篇-socket套接字实现服务器客户端消息传递,UDP实现
客户端窗口截图:
Python 技术篇-socket套接字实现服务器客户端消息传递,UDP实现