1 网络通信协议
Tcp udp的区别 重点(*****)
TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;文件传输程序。
UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文(数据包),尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。
直接看图对比其中差异
Tcp三次握手四次挥手(******)
2 tcp udp协议下的socket
基于TCP的socket通讯流程图片:
1 import socket 2 from socket import SOL_SOCKET,SO_REUSEADDR 3 sk = socket.socket() 4 # sk.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) 5 sk.bind(('127.0.0.1',8090)) 6 sk.listen() 7 conn,addr = sk.accept() #在这阻塞,等待客户端过来连接 8 while True: 9 ret = conn.recv(1024) #接收消息 在这还是要阻塞,等待收消息 10 ret = ret.decode('utf-8') #字节类型转换为字符串中文 11 print(ret) 12 if ret == 'bye': #如果接到的消息为bye,退出 13 break 14 msg = input('服务端>>') #服务端发消息 15 conn.send(msg.encode('utf-8')) 16 if msg == 'bye': 17 break 18 19 conn.close() 20 sk.close() 21 22 只能与第一个客户端通信server端代码
1 import socket 2 sk = socket.socket() 3 sk.connect(('127.0.0.1',8090)) #连接服务端 4 5 while True: 6 msg = input('客户端>>>') #input阻塞,等待输入内容 7 sk.send(msg.encode('utf-8')) 8 if msg == 'bye': 9 break 10 ret = sk.recv(1024) 11 ret = ret.decode('utf-8') 12 print(ret) 13 if ret == 'bye': 14 break 15 sk.close() 16 17 只能与第一个客户端通信client端代码
基于UDP的socket通讯流程:
udp_server
1 import socket 2 ip_port=('127.0.0.1',9000) 3 udp_sk=socket.socket(type=socket.SOCK_DGRAM) 4 udp_sk.sendto(b'hello',ip_port) 5 back_msg,addr=udp_sk.recvfrom(1024) 6 print(back_msg.decode('utf-8'),addr)