tcp总结与简单实现

2018-08-02 05:58:32来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

一、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()

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:python3基础盲点

下一篇:python构建web应用(入门级)