在前面,我们对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()
|