Python 第三十一章 UDP协议的socket

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")}')
原文地址:https://www.cnblogs.com/zhangshan33/p/11366255.html