Python UDP套接字编程

75 阅读2分钟

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函数获取服务器返回数据。