py小强

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

简单的实现UDP协议:

server.py

from socket import *  # socket模块,因为经常用很多次,所以推荐全部导入,这样可以少写很多socket.socket

# 生成套接字对象
server = socket(AF_INET, SOCK_DGRAM)  # AF_INET是网络类型家族(基于网络通信),stream是流的意思,即TCP协议(流式协议)

#2 绑定IP和端口
server.bind(('127.0.0.1', 8080))  # 以元组的形式传入 服务端IP 和 接收端口

# server.listen(5)  # UDP没有连接,所以不需要listen
# conn, client_addr = server.accept()  # UDP没有连接,所以不需要等待连接

#3 收,发消息(传数据)
while True:
    data, client_addr = server.recvfrom(1024)  # UDP使用recvfrom(),接收的参数是两个。
    print(data)

    server.sendto(data.upper(), client_addr)  # 发给客户端
server.close()

client.py

from socket import *

client = socket(AF_INET, SOCK_DGRAM)

while True:
    msg = input('>>> :').strip()
    client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080))  # 因为UDP没有连接,所以直接指定内容和服务器ip&端口来发送。
    # sendto(bytes类型data,元组类型服务器IP&端口)

    # if not msg: continue  # TCP中不能发空数据,而UDP数据即使为空,因为自带报头(数据报协议),所以可以发送。
    # UDP协议必须发送和接受是1对1的,即一个sendto对应一个recvfrom。(数据报是完整的数据)
    # UDP不会粘包
    # UDP中,一次发送的数据超过对方一次接收的上限,超出部分会丢失。(windows会报错)

    data, server_addr = client.recvfrom(1024)
    print(data, server_addr)
client.close()
posted on 2019-08-04 17:54  py小强  阅读(105)  评论(0)    收藏  举报