UDP协议
"""
UDP与TCP的区别
TCP面向链接的协议,流式协议,安全可靠,效率低的协议,用于传输文件
UDP用户数据报协议,效率高,不安全不可靠的协议,用于聊天软件
1.基于udp协议的socket:无须建立管道,先开服务端或者客户端都可以
2.基于udp协议的socket:接收一个消息,发送一个消息都是无连接的,任意一个客户端都可以与服务端沟通(有先后顺序)
3.基于udp协议的socket:只要拿到ip地址和端口就可以给服务端发消息,服务端按照顺序接收消息
"""
服务端
# 导入socket模块
import socket
# 创建一个server对象
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 基于网络的UDP协议的socket 面向数据报 (第一个聊完了才能与第二个聊)
# 连接本地ip
server.bind(('127.0.0.1',9000))
# while循环发送消息
while 1:
# 阻塞,等待客户端来消息
from_client_data = server.recvfrom(1024) # 谁连我,谁就能发消息
# 1024 最大字节1024
# 输出客户端的消息
print(from_client_data)
# from_client_data得到的第一个是客户端的消息(转成字节型)第二个是客户端的ip地址和端口
# b'x88xe6x81xaf', ('127.0.0.1', 56104))
# 输出客户端的消息
print(f'来自客户端{from_client_data[1]}:{from_client_data[0].decode("utf-8")}')
# from_client_data[1] 客户端的ip地址
# {from_client_data[0] 客户端的字节型的消息 decode("utf-8") 解析成utf-8格式
# 给客户端发送消息
to_client_data = input('>>>给客户端发消息')
# 服务端把消息发送给客户端用sendto方法
server.sendto(to_client_data.encode('utf-8'),from_client_data[1])
# o_client_data.encode('utf-8') 转成字节型
# from_client_data[1] 客户端的ip地址
客户端
# 导入socket模块
import socket
# 创建一个client对象
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 基于网络的UDP协议的socket 面向数据报 (可以开启多个客户端与服务端连接)
# while循环发送消息
while 1:
# 给服务端发送消息
to_server_data = input('>>>服务端发消息')
# 客户端把消息发送给服务端发送消息用sendto方法
client.sendto(to_server_data.encode('utf-8'),('127.0.0.1',9000)) # 服务器地址直接写后面
# to_server_data.encode('utf-8') 消息转成字节类型
# ('127.0.0.1',9000) 发送到服务端,直接跟服务端的地址和端口号
# 接收的消息
data,addr = client.recvfrom(1024)
print(data,addr)
# data 服务端的消息字节型
# addr 服务端的ip地址
# 1024 最大字节1024
# 输出接收到的服务端的消息
print(f'来自服务端{addr}的消息:{data.decode("utf-8")}')
# data.decode("utf-8") 将数据转成utf-8格式
纯代码
服务端:
import socket
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 基于网络的UDP协议的socket
server.bind(('127.0.0.1',9000))
while 1:
from_client_data = server.recvfrom(1024) # 阻塞,等待客户来消息
print(f' 33[1;35;0m来自客户端{from_client_data[1]}: {from_client_data[0].decode("utf-8")} 33[0m')
to_client_data = input('请服务端输入').strip()
server.sendto(to_client_data.encode('utf-8'),from_client_data[1])
客户端:
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 基于网络的UDP协议的socket
while 1:
to_server_data = input('请客户端输入:').strip()
client.sendto(to_server_data.encode('utf-8'),('127.0.0.1',9000))
data,addr = client.recvfrom(1024)
print(f'来自服务端{addr}消息:{data.decode("utf-8")}')