2. UDP应用程序
(1)UDP是无连接的,从一个端系统向另一个端系统发送独立的数据分组,不对交付提供任何保证。
(2)如下图所示,使用UDP的两个通信进程之间的交互有以下几个过程:
①发送进程将目的地址附在数据分组之上(目的地址=目的主机IP+目的套接字所在的端口号)【分组上面的源地址由底层操作系统自动填写】
②因特网使用该目的地址为该分组选路到目的进程的套接字;
③接收进程通过该套接字取回分组。
3. 用Python3 实现一个简单的UDP应用程序
(1)应用程序的客户端
#socket 模块形成了在python中所有网络通信的基础 from socket import * serverName='45.76.204.40' #包含服务器的主机名或IP地址 serverPort=12000 #目标端口号 #使用socket()创建客户套接字。 #第一个参数指示了地址簇:AF_INET指示了底层网络使用了IPv4 #第二个参数,SOCK_DGRAM指示了它是一个UDP套接字(而不是TCP套接字) #特别注意:我们无需指定客户端套接字的端口号,这个工作由操作系统完成 clientSocket=socket(AF_INET,SOCK_DGRAM) message=input('Input lowercase sentence:') #提示用户从键盘输入,并将输入读取到message中 #sendto()为报文message附上目的地址(serverName,serverPort), #并向进程的套接字clientSocket发送结果分组 clientSocket.sendto(message.encode(),(serverName,serverPort)) #来自因特网的分组到达该客户的套接字时,其分组数据放在变量ModifiedMessage中,源地址放置在serverAddress中 #方法recvfrom取长度2048作为输入 ModifiedMessage,serverAddress=clientSocket.recvfrom(2048) print (ModifiedMessage.decode()) clientSocket.close()(2)然后是服务器程序:
from socket import * serverPort=12000 serverSocket=socket(AF_INET,SOCK_DGRAM) serverSocket.bind(('',serverPort)) #将端口号与服务器的套接字显示绑定在一起 print('The server is ready to receive') #这个while允许服务器无限期地接收来自客户端的分组 while True: message,clientAddress=serverSocket.recvfrom(2048) modifiedMessage=message.upper() serverSocket.sendto(modifiedMessage,clientAddress) 应该注意的是,如果是用IDLE运行这两个程序的话,应注意为他们各自开启一个进程(即打开两个IDLE):先让服务器程序保持运行状态,然后运行客户程序。