TCP协议
-
类似于打电话(代码实现见上一章节)
-
特点:可靠 、慢、全双工通信
-
建立连接的时候:三次握手:syn ack
-
断开连接的时候:四次挥手:fin ack
-
区别:
-
三次握手把一个回复和请求连接的两条信息合并成一条了
-由于乙方断开连接之后,可能另一方还有数据没有传递完,所以不能立即断开,所以回收的时候不能合并信息 -
在建立起连接之后
- 发送的每一条信息都有回执
- 为了保证数据的完整性,还有重传机制
-
长链接:会一直占用双方的端口
-
IO(input,output)操作,输入和输出是相对内存来说的
- write/send ——> output
- read/recv ——> input话
-
特点:可靠 、慢、全双工通信
-
建立连接的时候:三次握手
-
断开连接的时候:四次挥手
-
在建立起连接之后
- 发送的每一条信息都有回执
- 为了保证数据的完整性,还有重传机制
-
长链接:会一直占用双方的端口
-
IO(input,output)操作,输入和输出是相对内存来说的
- write/send ——> output
- read/recv ——> input
UDP协议
- 类似于发短信
- 无连接 速度快
- 可能会丢失消息
应用场景
- TCP 文件的上传下载(发送邮件、网盘、缓存电影)、保证数据的可靠,高清电影的下载
- 能够传递的数据几乎没有限制
- UDP 及时通信类(qq、微信、飞秋),在线观看视频
- 能够传递的数据的长度是有限的,是根据传递设备的设置有关系(路由器的最小字节)
带身份带颜色变换的无限多用户通讯
#sever端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)#起了个udp协议
sk.bind(("127.0.0.1",9000))
while True:
msg,client_addr = sk.recvfrom(1024) #需要知道通信地址
print(msg.decode("utf-8")) #收完后解码
msg = input(">>>").encode("utf-8")
sk.sendto(msg,client_addr) #按照其通信地址发送信息
sk.close()
#client1端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
while True:
inp = input(">>>").encode("utf-8")
sk.sendto(inp,("127.0.0.1",9000)) #发
ret = sk.recv(1024) #收
print(ret.decode("utf-8"))
sk.close()
#client2端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
while True:
inp = input(">>>").encode("utf-8")
sk.sendto(inp,("127.0.0.1",9000))
ret = sk.recv(1024)
print(ret.decode("utf-8"))
sk.close()