UDP套接字
UDP是无链接的,先启动哪一端都不会报错;
UDP是没有listen的,listen实际上的目的就是要等待连接的接入,而UDP是没有连接的,它根本就不会像TCP一样首先建立连接,所以就没必要建立连接;
UDP和UDP通信在建立连接的时候无需进行握手协议,直接通信即可,所以可见它是一个不安全的协议
UDP简单通讯
import socket
sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.sendto(b'caichangen',('192.168.2.29',8080))
sock.close()
UDP服务端
ss = socket() #创建一个服务器的套接字
ss.bind() #绑定服务器套接字
inf_loop: #服务器无限循环
cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)
ss.close() # 关闭服务器套接字
UDP客户端
cs = socket() # 创建客户套接字
comm_loop: # 通讯循环
cs.sendto()/cs.recvfrom() # 对话(发送/接收)
cs.close() # 关闭客户套接字
聊天示例
UDP服务端
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/3/2 15:12
# @Author : CaiChangEn
# @Software: PyCharm
from socket import *
IP_PORT=('0.0.0.0',8080)
UDP_SERVER=socket(AF_INET,SOCK_DGRAM) #AF_INET:基于网络的套接字,SOCK_DGRAM:数据报式的套接字,也就是UDP套接字
UDP_SERVER.bind(IP_PORT)
while True:
data,addr=UDP_SERVER.recvfrom(BUFFER_SIZE) # 收的是一个元祖,第一个是发送的数据,第二个是客户端的IP和端口
print(data.decode('utf-8'))
UDP_SERVER.sendto(data,addr)
客户端
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/3/2 15:12
# @Author : CaiChangEn
# @Software: PyCharm
from socket import *
IP_PORT=('127.0.0.1',8080)
UDP_CLIENT=socket(AF_INET,SOCK_DGRAM)
while True:
msg=input('请输入要发送的消息(q/Q退出):')
if msg == 'Q' or msg == 'q':
UDP_CLIENT.close()
break
else:
UDP_CLIENT.sendto(msg.encode('utf-8'),IP_PORT)
data,addr=UDP_CLIENT.recvfrom(BUFFER_SIZE)
print(data.decode('utf-8'))
閱讀更多 動漫資深愛好者和IT 的文章