基于UDP的socket tcp和udp的区别(小白进击篇)

时间:2023-07-02 19:19:31

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地址和端口就都可以给我发信息,我按照顺序接收消息

17.socketserver