Python UDP Server and Client
最近自学python, 尝试写了些Python 的server和client
- Python UDP Server
- Python UDP Client
- str 与bytes的转换
Python UDP Server
不同于TCP需要先建立虚拟的连接,UDP不需要事先建立连接。只要知道互相的ip地址和端口号就可以发消息通信,UDP不像TCP那样保证可靠性,所以更加快速便捷。以下是Python UDP server端代码
from socket import *
from time import ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
udpSerSock = socket(AF_INET,SOCK_DGRAM)
udpSerSock.bind(ADDR)
while True:
data, addr = udpSerSock.recvfrom(BUFSIZ)
print('Received from %s:%s.' % addr )
print(data)
reply = 'Hello, %s!' % data.decode('utf-8')
udpSerSock.sendto(reply.encode('utf-8'), addr)
UDP server需要绑定一个端口号,然后把自己的IP地址和端口号告诉提供需要使用的人,对方通过IP和端口号即可向server端发送消息。
Python UDP Client
当我们知道了Server给我们的IP和端口号,我们就可以直接向UDP server发送消息,代码非常简单,入下:
from socket import *
HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
udpCliSock = socket(AF_INET,SOCK_DGRAM)
while True:
data = input('>')
msg = data.encode('utf-8')
# for data in [b'Michael', b'Tracy', b'Sarah']:
# 发送数据:
udpCliSock.sendto(msg, (ADDR))
# 接收数据:
print(udpCliSock.recv(BUFSIZ).decode('utf-8'))
udpCliSock.close()
str和bytes
代码中发送数据默认要求bytes类型,而从input方法中得到的输入时str类型,所以需要转换一下。str to bytes转换方式入下:
msg = data.encode(‘utf-8’)
另外需要注意的是上述代码是Python3下的,未在Python2下测试过。