day27_udp协议

1、udp协议

UDP是一种不可靠的传输协议,
1)不需要建立双向管道。
2)不会粘包
3)客户端给服务端发送数据,不需要等待服务端返回接收成功
3)数据容易丢失,数据不安全。

2、基于udp协议的套接字编程

2.1 简单使用

# 客户端.py
import socket
client = socket.socket(type=socket.SOCK_DGRAM)  # 参数SOCK_DGRAM代表UDP
server_ip_port = ('127.0.0.1', 9527)  # 获取服务器套接字

client.sendto(b'hello', server_ip_port)  # 一次性发送多个数据包
client.sendto(b'hello', server_ip_port)
client.sendto(b'hello', server_ip_port)
client.sendto(b'hello', server_ip_port)
client.sendto(b'hello', server_ip_port)
# 服务端.py
import socket
server = socket.socket(type=socket.SOCK_DGRAM)  # 参数SOCK_DGRAM代表UDP
server.bind(  ('127.0.0.1', 9527)   )  # 服务器需要绑定套接字ip+port

msg, addr = server.recvfrom(1024)  # 可以一次接收多个数据
msg1, addr1 = server.recvfrom(1024)
msg2, addr2 = server.recvfrom(1024)

print(msg, msg1, msg2)

2.2 基于UDP实现qq聊天室

# 服务端.py
import socket

server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 10086))

while True:
    msg, addr = server.recvfrom(1024)
    msg1, addr1 = server.recvfrom(1024)
    msg2, addr2 = server.recvfrom(1024)

    print(addr)
    print(msg)

    print(addr1)
    print(msg1)

    print(addr2)
    print(msg2)

    send_msg = input('统一回复:').encode('utf-8')
    server.sendto(send_msg, addr)
    server.sendto(send_msg, addr1)
    server.sendto(send_msg, addr2)
# 客户端.py
import socket

client = socket.socket(type=socket.SOCK_DGRAM)
server_ip_port = ('127.0.0.1', 10086)

while True:
    msg = input(f'客户端:').encode('utf8')
    client.sendto(msg, server_ip_port)

    # msg_recv = client.recv(1024)  # 只接收消息
    msg_recv,addr = client.recvfrom(1024)  # recvfrom接收的是消息和地址,是一个元组

    print(f'服务端:{msg_recv.decode("utf8")}')
posted @ 2019-10-20 22:59  W文敏W  阅读(102)  评论(0编辑  收藏  举报