欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-04 17:50:03
[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地址和端口就都可以给我发信息,我按照顺序接收消息

17.socketserver