TCP协议与UDP协议

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()
posted @ 2021-06-02 16:29  小杨的冥想课  阅读(56)  评论(0编辑  收藏  举报