• tcp总结与简单实现


    一、TCP简介

    1. TCP介绍

     1)TCP协议,传输控制协议(Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议
     2)tcp通信的三个步骤
        创建连接、数据传输、终止连接

    2. TCP特点
     
     1)面向连接
     1. 通信双方必须先建立连接才能进行数据的传输
     2. 双方间的数据传输都可以通过这个连接进行,完成数据交换后,双方断开此连接,以释放系统资源
     3. 连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议

     2)可靠传输,通过一套机制来实现可靠传输
     1. 发送应答机制
     2. 超时重传
     3. 错误校验
     4. 流量控制-阻塞管理

     3)基于字节流的:以字节流的形式传递给目标主机

    3. TCP与UDP的不同点
     - 面向连接
     - 有序数据传输
     - 重发丢失的数据包
     - 舍弃重复的数据包
     - 无差错的数据传输
     - 阻塞/流量控制

    4.tcp与upd使用场景:

     1) udp:  广播数据时, 用udp   当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP ,比如QQ语音,QQ视频
     2) tcp: tcp比udp更安全,稳定,但是速度没有udp那么快,使用场景非常多;
     例如: http传输,文件传输,要求比较高的数据传输都会用tcp,目前大部分的传输都是基于tcp协议传输

    5. UDP与TCP的通信模型 
      
     1) udp通信模型
     udp通信模型中,在通信开始之前,不需要建立相关的连接,只需要发送数据即可,类似于生活中,"写信"",没有严格的客户端和服务端之分
           
     2) tcp通信模型
     tcp通信模型中,在通信开始之前,一定要先建立相关的连接,才能发送数据,类似于生活中,"打电话"",tcp有严格的客户端与服务端之分

    二、TCP网络程序-客户端

    1. TCP客户端实现流程
     tcp流程步骤:
     1)创建tcp socket客户端对象
     2)与服务端建立连接
     3)收发数据(读写数据)
     4)关闭连接

    2.示例代码:

      import socket
    
        # 创建socket
        tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
        # 目的信息
        server_ip = input("请输入服务器ip:")
        server_port = int(input("请输入服务器port:"))
    
        # 连接服务器
        tcp_client_socket.connect((server_ip, server_port))
    
        # 提示用户输入数据
        send_data = input("请输入要发送的数据:")
    
        tcp_client_socket.send(send_data.encode("utf-8"))
    
        # 接收对方发送过来的数据,最大接收1024个字节
        recv_data = tcp_client_socket.recv(1024)
        print('接收到的数据为:', recvData.decode('gbk'))
    
        # 关闭套接字
        tcp_client_socket.close()

    三、TCP网络程序-服务端

    1. TCP服务端创建及实现流程 
     tcp流程步骤:
     1)创建一个server_socket ,用于监听客户端的请求
     2)绑定端口
     3)server_socket开启监听listen,server_socket由主动模拟模式变为被动连接模式
     4)等待接收客户端的连接请求,一有客户端的连接请求,立即接受,并且创建一个与客户端socket对接的socket,新创建的socket用来与客户端的socket进行通信
     5)使用新创建的socket与客户端的socket进行通信(收发数据)
     6)关闭新创建的socket,该socket关闭后, 不再与当前客户端通信,结束与当前客户端的通信
     7)关闭server_socket,该server_socket关闭后,不再接收新的客户端请求

    2.示例代码:

      import socket
    
        # 创建socket
        tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
        # 本地信息
        address = ('', 8090)    # 元组
    
        # 绑定端口,tcp服务端必须绑定端口
        tcp_server_socket.bind(address)
    
        # 使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的连接请求
        tcp_server_socket.listen(5) # backlog=5 表示积压的客户端连接请求最多5个, 超过5个,则拒绝连接
    
        # 如果有新的客户端来连接服务器,那么就产生一个新的套接字专门为这个客户端服务
        # client_socket用来为这个客户端服务
        # tcp_server_socket就可以省下来专门等待其他新客户端的连接
        client_socket, client_addr = tcp_server_socket.accept()
    
        # 接收对方发送过来的数据
        recv_data = client_socket.recv(1024)  # 最多接收1024个字节
        print('接收到的数据为:', recv_data.decode('gbk'))
    
        # 发送一些数据到客户端
        client_socket.send("thank you !".encode('gbk'))
    
        # 关闭为这个客户端服务的套接字,只要关闭了,就意味着为不能再为这个客户端服务了,如果还需要服务,只能再次重新连接
        client_socket.close()
  • 相关阅读:
    leetcode 之Jump Game
    leetcode 之 Symmetric Tree
    leetcode 之 House Robber
    设计模式之建造者模式
    centos7 yum tab 补全
    设计模式之适配器模式
    设计模式之状态模式
    设计模式之外观模式
    设计模式之模板方法模式
    对以<uses-permission android:maxSdkVersion="xx" /> 中的说明
  • 原文地址:https://www.cnblogs.com/longguoliang/p/9404078.html
Copyright © 2020-2023  润新知