创建upd套接字基本格式
import socket
# 创建udp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# ...这里是使用套接字的功能(省略)...
# 不用的时候,关闭套接字
s.close()
接收消息
import socket
def main():
"""测试UDP接收数据"""
# 1. 创建套接字
soc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
soc.sendto(b'haha', ('192.168.130.1', 1314))
# 2. 接收数据
print('开始接收数据~~')
msg, send_addr = soc.recvfrom(1024) # 参数表示最多接收的数据大小
# print(recv_data) # 接收到的数据是一个元组,(消息内容, (发送者IP,发送者port))
print('%s 发送来消息: %s' % (send_addr[0], msg))
# 3. 关闭套接字
soc.close()
if __name__ == '__main__':
main()
发送消息
import socket
def main():
# 创建UDP套接字
soc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 发送数据
addr = ('192.168.130.1', 1314) #接收地址是一个元组,0 下标为 IP,1 下标为 端口号
soc.sendto(b'hi, mei nv.', addr) # 参数0 为消息内容, 参数1 为接收地址
# 关闭套接字
soc.close()
if __name__ == '__main__':
main()
绑定端口
from socket import *
# 1. 创建套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)
# 2. 绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配
local_addr = ('', 7788) # ip地址和端口号,ip一般不用写,表示本机的任何一个ip
udp_socket.bind(local_addr)
# 3. 等待接收对方发送的数据
recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数
# 4. 显示接收到的数据
print(recv_data[0].decode('gbk'))
# 5. 关闭套接字
udp_socket.close()
编码、解码
因为数据在网络中传输都是要使用二进制的数据格式,所以使用upd的套接字进行收发消息的时候需要对消息内容进行编码和解码
编码格式为:
- 字符串.encode(“编码格式”)
- 解码格式为:
- 字符串.decode(“编码格式”)