在前面,我们对UDP协议的相关内容也有了一定了解了。那么接下来我们则重点将诶少一下UDP客户端的创建过程。首先让我们看一下在Unix系统中,如何进行创建。那么请大家浏览文章看一下编写的源码。
创建一个UDP客户端
这一节中介绍的4段程序中,下面的这段UDP客户端代码是最短的。伪代码如下:
- cs = socket() # 创建客户端套接字
- comm_loop: # 通讯循环
- cs.sendto()/cs.recvfrom() # 对话(发送/接收)
- cs.close() # 关闭客户端套接字
在套接字对象创建好之后,我们就进入一个与服务器的对话循环。在通信结束后,套接字就被关闭了。tsUclnt.py真实的代码在例16.4中给出。
逐行解释
1~3行
还是跟TCP版本的客户端一样,在Unix的启动信息行后,我们导入了socket模块的所有属性。
5~10行
因为我们的服务器也是运行在本机,我们的客户端还是使用本机和相同的端口号。自然地,缓冲区的大小也还是1K。创建套接字的方法跟UDP服务器中的一样。
12~22行
UDP客户端的循环基本上与TCP客户端的完全一样。***的区别就是,我们不用先去跟UDP服务器建立连接,而是直接把消息发送出去,然后等待服务器的回复。得到加了时间戳的字符串后,把它显示到屏幕上,然后再继续其他的消息。在输入结束后,退出循环,关闭套接字。
例16.4 UDP时间戳客户端(tsUclnt.py)
创建一个UDP客户端,程序会提示用户输入要传给服务器的信息,显示服务器返回的加了时间戳的结果。
#!/usr/bin/env python
from socket import *
HOST=' localhost '
PORT=21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
udpCliSock = socket(AF_INET, SOCK_DGRAM)
while True:
data = raw_input('> ')
if not data:
break
udpCliSock.sendto(data, ADDR)
data, ADDR = udpCliSock.recvfrom(BUFSIZ)
if not data:
break
print dataudpClisock.close()
udpCliSock.close()