与tcp相对应的另一种网络传输:
客户端代码:
"""
udp_client.py udp客户端流程
"""
from socket import *
# 服务端地址
ADDR = ('127.0.0.1',8888)
# 创建udp套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
# 循环发送消息
while True:
data = input("Msg>>")
if not data: # 遇到输入为空就结束循环
break
# 向服务器发送
sockfd.sendto(data.encode(),ADDR) # 没有connect,而是在sendto时,使用ADDR
msg,addr = sockfd.recvfrom(1024) # 接收消息,记得写上消息缓冲区大小
print("From Server:",msg.decode()) # 打印时记得转换成字符串
sockfd.close() # 关闭套接字
服务端代码:
"""
udp_server.py udp服务端流程
重点代码
"""
from socket import *
# 创建udp套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
# 绑定地址
server_addr = ('0.0.0.0',8888)
sockfd.bind(server_addr)
# 收发消息
while True:
data,addr = sockfd.recvfrom(1024) # 直接接收到的就是data
# if not data:
# break # (接收为空时,退出)但是不合适,因为udp不止一个客户端
print("From %s Msg:%s"%(addr,data.decode()))
sockfd.sendto(b'Thanks',addr) # 发送时要添加目标地址
# 关闭套接字
sockfd.close()
总结 :tcp套接字和udp套接字编程区别
- 流式套接字是以字节流方式传输数据,数据报套接字以数据报形式传输
- tcp套接字会有粘包,udp套接字有消息边界不会粘包
- tcp套接字保证消息的完整性,udp套接字则不能
- tcp套接字依赖listen accept建立连接才能收发消息,udp套接字则不需要
- tcp套接字使用send,recv收发消息,udp套接字使用sendto,recvfrom
socket套接字属性
【1】 sockfd.type 套接字类型
【2】 sockfd.family 套接字地址类型
【3】 sockfd.getsockname() 获取套接字绑定地址
【4】 sockfd.fileno() 获取套接字的文件描述符
【5】 sockfd.getpeername() 获取连接套接字客户端地址
【6】 sockfd.setsockopt(level,option,value)
功能:设置套接字选项
参数: level 选项类别 SOL_SOCKET
option 具体选项内容
value 选项值
来源:CSDN
作者:liu*star
链接:https://blog.csdn.net/liuxingxing_star/article/details/103651498