基于UDP的socket tcp和udp的区别(小白进击篇)
程序员文章站
2022-04-29 19:07:42
[TOC] 16.基于udp协议的socket通信 udp不会出现粘包现象,但发送长度有限制 最大512 发多了容易出现丢包 不可靠的数据连接 先启动哪一端都不会报错 用于qq微信 可用于开启多个客户端 为什么udp不会有粘包现象 你发一个我接收一个(一一对应) 不会产生粘包 发送过大 接收小没有缓 ......
16.基于udp协议的socket通信
import socket server=socket.socket(type=socket.sock_dgram) import socket server=socket.socket(socket.af_inet,socket.sock_dgram)
udp不会出现粘包现象,但发送长度有限制
最大512 发多了容易出现丢包
不可靠的数据连接 先启动哪一端都不会报错 用于qq微信 可用于开启多个客户端
为什么udp不会有粘包现象
你发一个我接收一个(一一对应) 不会产生粘包
import socket server=socket.socket(socket.af_inet,socket.sock_dgram) sp=input('121313').encode('utf-8') phone.sendto(sp,('127.0.0.1',8080))#发送sendto msg,addr=phone.recvfrom(1024) print(msg.decode('utf-8'),addr) phone.close()
发送过大 接收小没有缓冲区就会丢包(windows直接报错)
sock_dgramsok
dgram datagram#数据报文
发送sento (发送的信息,发送给的地址)
接收revefrom
msg,addr=recvfrom(1024) msg.decode(1024)
客户端
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'),('192.168.14.198',9000)) #发送消息的时候要带上发送的地址 # data,addr = client.recvfrom(1024) # print(f'来自服务端{addr}消息:{data.decode("utf-8")}')
服务端
#服务端只能被动的接收客户端的消息 #客户端发消息的时候还会自带地址 # 回复消息的时候要把对方的地址填写上 import socket server=socket.socket(socket.af_inet,socket.sock_dgram)#udp server.bind(('127.0.0.1',8080)) msg,addr=server.recvfrom(1024) print(msg.decode('utf-8'),addr) server.sendto(b'121',addr) server.close()
tcp和udp的区别:
1.基于 udp协议的socket无需建立管道,先开启服务端或者客户端都行
2.基于udp 协议的socket接收一个消息,与发送一个消息都是无连接的
服务端开启之后没有连接
3.只要拿到我的ip地址和端口就都可以给我发信息,我按照顺序接收消息