《python核心编程》读书笔记-创建UDP服务端/客户端

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值