UDP套接字编程
相较于TCP模型,UDP编程不需要考虑构建连接,我们只关心将数据发送即可
对应的服务器及客户端模型也将简单很多
服务端模型
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind( ('',8000) )
while True:
data,c_addr = s.recvfrom(1024)
s.sendto(msg, c_addr)
s.close()
UDP套接字不存在连接构建,所以不需要额外开启监听,当为服务端套接字绑定端口及IP地址时,UDP套接字属性为 socket.SOCK_DGRAM。
s = socket(AF_INET,SOCK_DGRAM):创建UDP套接字。s.bind(('',8000)):绑定可用IP及端口。data,c_addr = s.recvfrom(1024):通过服务端套接字直接使用recvfrom即可接收到其他客户端所发送的数据,返回的第一个参数为客户端发送来的数据,第二个参数为客户端地址及端口的元组,如:('47.104.224.67',8080)。s.sendto(msg, c):这里服务端在发送消息时,也很简单,不需要构建连接,直接向客户端地址发送即可
UDP的服务端模型看起来要比TCP的简单许多,每一条客户端的消息都是独立发送来,不存在连接状态。同样的,在向客户端返回消息的时候,也只需要指明消息内容和接收数据的地址即可
客户端模型
import socket
c = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
c.sendto(msg, ('47.104.224.67',8080) )
data, s_addr = c.recvfrom(1024)
s.close()
客户端同样不需要和服务端达成连接,数据直接发送即可
c.sendto(msg, ('47.104.224.67',8080)):sendto函数向第二个参数所指定的IP地址及端口发送第一个参数所给的数据。data, s_addr = c.recvfrom(1024):类似服务器,客户端也可以直接通过recvfrom函数获取服务器返回数据。