UDP服务器
伪码
ss = socket() # 创建服务器套接字
ss.bind() # 绑定服务器套接字
inf_loop: # 服务器无限循环
cs = ss.recvfrom()/ss.sendto() # 关闭(接收/发送)
ss.close() # 关闭服务器套接字
具体实现
[root@localhost ~]# cat udpserv.py
#!/usr/bin/env python3.4
from socket import * #socket模块不需要下载,自带了
from time import ctime
HOST = ''
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST, PORT)
udpSerSock = socket(AF_INET,SOCK_DGRAM)
udpSerSock.bind(ADDR)
while True:
print ('waiting for message...')
data,addr=udpSerSock.recvfrom(BUFSIZE)
udpSerSock.sendto(('[%s] %s' % (ctime(),data.decode())).encode(),addr)
print('...received from and returned to : ',addr)
udpSerSock.close()
UDP客户端
伪码
cs = socket() # 创建客户端套接字
comm_loop: # 通信循环
cs.sendto()/cs.recvfrom() # 对话(发送/接收)
cs.close() # 关闭客户端套接字
具体实现
[root@localhost ~]# cat udpcli.py
#!/usr/bin/env python3.4
from socket import * #socket模块不需要下载,自带了
HOST = ''
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST, PORT)
udpCliSock = socket(AF_INET,SOCK_DGRAM)
while True:
data= input('> ')
if not data:
break
udpCliSock.sendto((data.encode()),ADDR)
data,addr=udpCliSock.recvfrom(BUFSIZE)
if not data:
break
print(data)
udpCliSock.close()
以上都是测试成功的部分,下面是遇到的错误的总结
遇到的错误
客户端遇到的问题
[root@localhost ~]# ./udpcli.py
> 123
Traceback (most recent call last):
File "./udpcli.py", line 16, in <module>
udpCliSock.sendto(data,ADDR)
TypeError: 'str' does not support the buffer interface
问题的部分代码
udpCliSock.sendto(data,ADDR)
解决方法,修改为
udpCliSock.sendto(data.encode(),ADDR)
服务端遇到的问题
[root@localhost ~]# ./udpserv.py
waiting for message...
Traceback (most recent call last):
File "./udpserv.py", line 17, in <module>
udpSerSock.sendto('[%s] %s' % (ctime(),data),addr)
TypeError: 'str' does not support the buffer interface
有问题的部分代码
udpSerSock.sendto('[%s] %s' % (ctime(),data),addr)
解决方法,修改为
udpSerSock.sendto(('[%s] %s' % (ctime(),data.decode())).encode(),addr)
参考的链接 https://blog.csdn.net/chuanchuan608/article/details/17915959