TCP网络应用程序开发流程

目录

一、TCP 网络应用程序开发流程的介绍

1、TCP客户端程序开发流程的介绍

2、TCP服务端程序开发流程的介绍

二、TCP客户端程序开发

三、TCP服务端程序开发

四、TCP网络应用程序的注意

五、socket之send和recv原理

1、认识TCP socket的发送和接收缓冲区

2、send原理剖析

3、recv原理剖析


一、TCP 网络应用程序开发流程的介绍

TCP网络应用程序开发分为:

TCP客户端程序开发

TCP服务端程序开发

说明:客户端程序是指运行在用户设备上的程序 服务端程序是运行在服务器设备上的程序,专门为客户端提供数据服务

1、TCP客户端程序开发流程的介绍

步骤说明:

        1.创建客户端套接字对象

        2.和服务端套接字建立连接

        3.发生数据

        4.接收数据

        5.关闭客户端套接字

2、TCP服务端程序开发流程的介绍

步骤说明: 

        1.创建服务端套接字对象 

        2.绑定端口号 

        3.设置监听

        4.等待接受客户端的连接请求

        5.接收数据

        6.发送数据

        7.关闭套接字

二、TCP客户端程序开发

步骤说明:

        1.创建客户端套接字对象

        2.和服务端套接字建立连接

        3.发生数据

        4.接收数据

        5.关闭客户端套接字

开发代码:

import socket
if __name__ == '__main__':

    # 创建tcp客户端套接字
    # AF_INET:ipv4地址类型
    # SOCK_STREAM:tcp传输协议类型
    tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 和服务端套接字建立连接
    tcp_client_socket.connect(("192.168.68.160",8080))

    send_content = "hello"
    # 对字符串进程编码成二进制数据
    send_data = send_content.encode("gbk")
    # 发送数据到服务端
    tcp_client_socket.send(send_data)
    # 接收服务端数据
    recv_data = tcp_client_socket.recv(1024)
   
    # 对二进制进行解码
    recv_content = recv_data.decode("gbk")
    print(recv_content)
    # 关闭套接字
    tcp_client_socket.close()

将网络调试助手代替服务端与客户端进行连接,测试结果如下:

客户端与服务端进行连接,连接成功后,客户端给服务端发送“hello”信息。

TCP网络应用程序开发流程_第1张图片

 

服务端给客户端发送信息后,客户端成功接收信息后,就关闭与服务端的连接,服务端发送的信息在客户端的控制台中显示。

TCP网络应用程序开发流程_第2张图片 

TCP网络应用程序开发流程_第3张图片 

 

 

 

三、TCP服务端程序开发

import socket

if __name__ == '__main__':
    # 创建tcp服务端的套接字
    tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 端口号复用
    tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
    # 绑定端口
    tcp_server_socket.bind(("",8080))
    # 设置监听
    tcp_server_socket.listen(128)
    # 等待接受客户端的连接请求
    # 注意点:当客户端和服务端建立连接成功后都会返回一个新的套接字
    # tcp_serve只负责等待接收客户端的连接请求,收发消息都不使用该套接字
    new_client,ip_port = tcp_server_socket.accept()
    print("客户端的IP和端口号:",ip_port)
    # 接收客户端的数据
    recv_data = new_client.recv(1024)
    # 对二进制数据进行解码
    recv_content = recv_data.decode("gbk")
    print("接收客户端的数据:",recv_content)
    # 发送数据到客户端
    send_content = "问题正在处理中"
    send_data = send_content.encode("gbk")
    new_client.send(send_data)
    new_client.close()
    # 关闭服务端套接字,表示服务端的套接字不会再等待客户端的连接请求
    tcp_server_socket.close()

当服务端程序运行时,用网络调试助手充当客户端,与服务端进行连接,连接成功时,服务端的控制台会打印出,当前连接客户端的IP和端口号。

TCP网络应用程序开发流程_第4张图片

TCP网络应用程序开发流程_第5张图片 

 

当在客户端发送消息给服务端,服务端接收到消息后,会向客户端发送消息,最后在关闭服务端。

TCP网络应用程序开发流程_第6张图片

TCP网络应用程序开发流程_第7张图片 

 

四、TCP网络应用程序的注意

  1. 当TCP客户端程序想要从TCP服务端程序进行通信的时候必须先要建立连接

  2. TCP客户端程序一般不需要绑定端口号,否则客户端时主动发起建立连接的

  3. TCP服务端程序必须绑定端口号,否则客户端找不到这个TCP服务端程序

  4. listen后的套接字时被动套接字,只负责接收新的客户端的连接请求,不能收发消息

  5. 当TCP客户端程序和TCP服务端程序连接成功后,TCP服务端会产生一个新的套接字,接收客户端消息使用该套接字

  6. 关闭accept返回的套接字意味着和客户端已经通信完毕

  7. 关闭listen后的套接字意味着服务端的套接字关闭了,会导致新的客户端不能 连接服务端,但是之前已经成功连接的客户端还能正常通信

  8. 当客户端的套接字调用close后,服务端的recv会解阻塞,返回的数据长度为0,服务端可以通过返回数据的长度来判断客户端是否已经下线,反之服务端关闭套接字,客户端的recv也会解阻塞,返回的数据长度为0

五、socket之send和recv原理

1、认识TCP socket的发送和接收缓冲区

当创建一个TCP socket对象的时候会有一个发送缓冲区和一个接收缓冲区,这个发送和接受缓冲区指的是内存中的一片空间

2、send原理剖析

send必须得通过网卡发送数据,应用程序是无法直接通过网卡发送数据的,它需要调用操作系统接口,也就是说,应用程序发送数据先写入到发送缓冲区(内存中的一片空间),再有操作系统控制网卡把发送缓冲区的数据发送给服务端网卡

3、recv原理剖析

应用软件是无法通过网卡接受数据的,它需要第哦啊有操作系统接口,由操作系统通过网卡接收数据,把接收的数据写入到接收缓冲区(内存的一片空间),应用程序再从接收缓冲区获取客户端发送的数据

你可能感兴趣的:(网络编程,Python进阶,tcp/ip,网络,python,网络协议)