运行环境: Pycharm 2021.3.1/python 3.9
UDPClient.pyfrom socket import * # UDP客户端 2022/02/25 # 定义服务器IP及端口号 serverIP = '127.0.0.1' serverPort = 997 # 创建客户套接字 clientSocket = socket(AF_INET, SOCK_DGRAM) # 输入message message = input('Please input your message:') # 发送 clientSocket.sendto(message.encode(), (serverIP, serverPort)) # 接收 modifiedMessage, serverAddress = clientSocket.recvfrom(2048) # 输出 print(modifiedMessage.decode()) # 关闭socket clientSocket.close()
UDPServer.pyfrom socket import * # UDP服务端 2022/02/25 # 定义服务器端套接字端口 serverPort = 997 # 创建服务器端套接字 serverSocket = socket(AF_INET, SOCK_DGRAM) # 将端口与套接字进行绑定 serverSocket.bind(('', serverPort)) print('The server is ready to receive!') # 循环 while True: # 接收客户端信息 message, clientAddress = serverSocket.recvfrom(2048) print('-------Received message: ' + message.decode() + '-------') # 处理 modifiedMessage = message.decode().upper() # 返回 serverSocket.sendto(modifiedMessage.encode(), clientAddress) print(modifiedMessage + '\n' + '------- I MADE IT ! -------')
运行结果:
Tips1:
python3中对文本与二进制数据做了更加清晰的区分。文本总是用unicode进行编码,以str类型表示;而二进制数据以bytes类型表示。
str.encode() = bytes
bytes.decode() = str
Tips2:
使用sendto()与recvfrom()进行数据传输时使用bytes类型,在控制台输入输出使用str类型,所以要进行encode/decode的转换。
参考: