TCP、UDP的区别
TCP:面向连接,提供服务前建立专门的传输连接,并且这条连接可管理,在需要或通信结束时进行拆除。面向连接的传输服务是可靠的传输服务,提供拥塞控制、差错控制和流量控制。
UDP:无连接,直接发送,不管是否能达到,尽力而为
通过上面两个模型的测试得到如下结论:
TCP需要建立通道,UDP不需要;服务器绑定UDP端口和TCP端口互不冲突(UDP的9999端口、TCP的9999端口可以同时绑定)。编程代码区别如下:
1.协议定义:
TCP:socket.socket(socket.AF_INET,socket.SOCK_STREAM)
TCP:socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
2.侦听设置方式:
TCP:必须有server.listen(5) 限制最大链接数
UDP:bind之后就可以实现侦听
3.接收数据方式:
TCP:client,addr = server.accept() #建立通道
#其中client为数据通道,包含addr地址信息内容,addr仅为客户段地址信息('ip',port)
request = client.recv(1024) #request才是通讯内容数据
UDP:data,client = server.recvfrom(1024) #无需建立通道,直接接收
#其中data为通讯内容数据,client为客户段地址信息('ip',port)
4.数据发送命令:
TCP:client.connect((target_host,target_port)) #需要先建立通道
client.send('aaaaa'.encode()) #发送数据(.encode将文字转换为数据流)
UDP:client.sendto('AAABBBCCC'.encode(),(target_host,target_port))
#由于UDP没有先建立通道,所以每发一次,必须指定发送方向(目标地址信息)
5.关闭通道
TCP:通道.close()
UDP:无需关闭