面向无连接的不可靠数据传输,可以没有做事器端,只不过没有做事器端,发送的数据会被直接丢弃,并不能到达做事器端

由于UDP是面向无连接的(实际上有链接,不然通过什么去传数据去取数据),可以利用多个客户端连接做事端,但这并不是并发访问。

把稳:

phpsocket连接udpPythonSocket套接字UDP衔接 jQuery

1. 发,都是将数据发送到己真个发送缓冲中,收都是从己真个缓冲区中收

tcp:send发,recv收

udp:sendto发,recvfrom收

2. tcp是基于数据流的,而udp是基于数据报的:

send(bytes_data):发送数据流,数据流bytes_data若为空,自己这段的缓冲区也为空,操作系统不会掌握tcp协议发空包

sendinto(bytes_data,ip_port):发送数据报,bytes_data为空,还有ip_port,所有即便是发送空的bytes_data,数据报实在也不是空的,自己这真个缓冲区收到内容,操作系统就会掌握udp协议发包。

3.1 tcp协议

(1)如果收缓冲区里的数据为空,那么recv就会壅塞(壅塞很大略,便是一贯在等着收)

(2)只不过tcp协议的客户端send一个空数据便是真的空数据,客户端纵然有无穷个send空,也跟没有一个样。

(3)tcp基于链接通信

· 基于链接,则须要listen(backlog),指定半连接池的大小

· 基于链接,必须先运行的做事端,然后客户端发起链接要求

· 对付mac系统:如果一端断开了链接,那其余一真个链接也随着塌台recv将不会壅塞,收到的是空(办理方法是:做事端在收后加上if判断,空就break掉通信循环)

· 对付windows/linux系统:如果一端断开了链接,那其余一真个链接也随着塌台recv将不会壅塞,收到的是空(办理方法是:做事端通信循环内加非常处理,捕捉到非常后就break掉通讯循环)

3.2 udp协议

(1)如果如果收缓冲区里的数据为\"大众空\公众,recvfrom也会壅塞

(2)只不过udp协议的客户端sendinto一个空数据并不是真的空数据(包含:空数据+地址信息,得到的报仍旧不会为空),以是客户端只要有一个sendinto(不管是否发送空数据,都不是真的空数据),做事端就可以recvfrom到数据。

(3)udp无链接

· 无链接,因而无需listen(backlog),更加没有什么连接池之说了

· 无链接,udp的sendinto不用管是否有一个正在运行的做事端,可以己端一个劲的发,只不过数据丢失

· recvfrom收的数据小于sendinto发送的数据时,在mac和linux系统上数据直接丢失,在windows系统上发送的比吸收的大直接报错

· 只有sendinto发送数据没有recvfrom收数据,数据丢失

实当代码

做事端:

#导入socket模块import socket#创建socketskt = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#绑定地址和端口skt.bind(('127.0.0.1',9090))#循环while True: #调用接管 data,addr = skt.recvfrom(1024) #接管成功回答 rst = b'I am fine' skt.sendto(rst,addr) print('server Done') #关闭链接 skt.close()

客户端

#导入模块import socket#创建socketskt = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#创建发送和发送目标msg = b'Hello world'addr = ('127.0.0.1',9090)skt.sendto(msg,addr)#接管回答rst = skt.recvfrom(1024)print(rst)print('client done')#关闭链接skt.close()