美文网首页
TCP与TCP聊天器

TCP与TCP聊天器

作者: 木叶苍蓝 | 来源:发表于2020-04-28 23:21 被阅读0次
    TCP简介

    TCP协议:传输控制协议( Transmission Control Protocol)是一种面向连接的,可靠地,基于字节流的传输层通信协议。
    TCP通信需要经过创建连接,数据传输,终止连接三个步骤。
    TCP通信模型中,在通信开始之前,一定要先建立相关连接,才能发送数据。类似于生活中的打电话。

    TCP特点
    1、面向连接

    通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。
    双方之间的数据传输都可以在这一个连接上进行。
    完成数据交换后,双方必须断开此连接,以释放系统资源。
    这种连接时一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP。

    2、可靠传输
      1. TCP采用发送应答机制
        TCP发送的每一个报文段都必须得到接收方的应答才认为这个TCP报文传输成功。
      1. 超时重传
        发送端发出一个报文段之后就启动定时器,如果在规定的时间内没有收到应答就重新发送这个报文段。
        TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包按序接收,然后接收端实体对已经成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设已丢弃将会进行重传。
      1. 错误校验
        TCP用一个校验和函数来校验数据是否有错误,在发送和接收时都要计算校验和。
      1. 流量控制和阻塞管理
        流量控制用来避免主机发送得过快而使接收方来内存占满。
    TCP与UDP的不同点
    • 面向连接(确认有三次握手,连接建立之后才会传输数据)
    • 有序数据传输
    • 重发丢失的数据包
    • 舍弃重复的数据包
    • 无差错的数据传输
    • 阻塞/流量控制
      ####### UDP通信模型
      UDP通信模型中,在通信开始之前,不需要建立相关的连接,只需要发送数据即可,类似于生活中写信。
    TCP通信模型

    TCP通信模型中,在通信开始之前,一定要先建立相关连接,才能发送数据,类似于打电话。


    TCP.png udp.png
    TCP客户端
    import socket
    
    def main():
        # 1. 创建tcp套接字
        tcp_socket = socket.socket(socket.AF_INET, socket.SOCKET_STREAM)
        # 2. 连接服务器
        # tcp_socket,connect("127.0.0.1", 7890)
        server_ip = input("请输入要连接的服务器ip: ")
        server_port = int(input("请输入要连接的服务器的port: "))
        server_addr = (server_ip, server_port)
        tcp_socket.connect(server_addr) 
        # 3. 发送数据/接收数据
        send_data = input("请输入要发送的数据: ")
        tcp_socket.send(send_data.encode("utf-8"))
        # 4. 关闭套接字
        tcp_socket.close()
    
    if __name__ == "__main__":
        main()
    
    TCP服务器
    import socket
    
    def main():
        # 1. 创建套接字
        tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 2. 绑定端口
        tco_server_socket.bind("127.0.0.1", 7890)
        # 3. 监听端口
        tcp_server_socket.listen(128)
        
        while True:
            # 4. 等待客户端连接
            new_client_socket, client_addr = tcp_server_socket.accept()
            print “一个新客户端到来: %s”%(str(client_addr),)
            while True:
                # 接收客户端发送的数据
                recv_data = new_client_socket,recv(1024)
                if recv_data:
                    # 返回数据给客户端
                    new_client_socket.send("hello world~~~".encode("utf-8"))
                else:
                    break
            # 关闭客户端套接字
            new_client_socket.close()
        # 关闭服务器套接字
        tcp_server_socket.close()
    
    
    if __name__ == "__main__":
        main()
    

    相关文章

      网友评论

          本文标题:TCP与TCP聊天器

          本文链接:https://www.haomeiwen.com/subject/tceiwhtx.html