python 在linux运行tcp服务器(网络调试助手充当客户端

网络知识

127.0.0.1是自己电脑上两个程序要通信可以采用的ip地址
套接字可以发也可以收数据,发过去的时候等于堵塞在对方程序中等待发的内容
单工:收音机(只能收或者发)
半双工:对讲机(可收可发,但不可同时进行)
全双工:打电话(收发同时进行
socket套接字是全双工

tcp通信、步骤

此外使用udp没有tcp安全udp会出现丢包现象(譬如写一封信,信在途中丢了也不知道)
但是tcp对方接收出现乱码现象会使得对方重发一遍(tcp是打电话模型,发送信息之前先保证两个端口之间网络连通(即通信之前必须先建立连接))
tcp发送信息给对方 接收者回应会回送数据给发送者。如果接收者在一定时间内没有发送则发送者超时重传重新发送
cp有错误校验(在发送前有一份发送清单,接收者拿到后根据发货清单来看货物,如果出错说明货物丢失,要求发送者重新发送)
流量阻塞(发送者发送5g文件,为了避免路上丢失,拆分成五份1g,当接收者受到1g东西时接收者说受到了在继续发下一份。此外如果要发送的内容大小为50g但是对方端口程序只能处理5g左右,一次性发送过大数据导致接收者端口卡死。所以流量堵塞很有必要)
tcp和udp不同,udp有发送和接收数据,但是tcp严格区分客户端和服务器。像qq就是客户端,而腾讯服务器为发送数据者
tcp通信大概

  1. 建立连接
  2. 发送数据
  3. 解除连接
    tcp客户端通信步骤:
    创建套接字
    在这里插入图片描述
    与udp不同tcp是SOCK_STREAM
    连接服务器
    收发数据
    关闭套接字
    tcp服务端步骤
    创建套接字(服务器有两个套接字,一个是accept来监听大家的需求,接听到后立马产生新的套接字为监听到的对象服务)
    bind绑定ip和port
    listen使得套接字变为可以被动连接
    accept等待客户端连接
    接发数据
    在这里插入图片描述
    有存在一个客户多次服务的状况的时候不能立即关闭第二个套接字,反而是判断ta是否还需要服务
    当客户点界面上的关闭的时recv收到一个空的数据给定义变量recv_data 此时判断如果recv_data为空时怎可关闭套接字
    在这里插入图片描述
    注意图中recv解堵塞的问题:
    客户端发回数据
    客户端调用close
 import socket
  2
  3 def main():
  4         tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  5         tcp_server_socket.bind(("",32230))
  6         tcp_server_socket.listen(128)
  7         print("------1----")
  8         print("等待一个客户端")
  9         while True:
 10         # 可以实现一直监听直到其关闭的时候才close
 11                 new_client_socket,client_addr = tcp_server_socket.accept()
 12                 print("--------2----------")
 13                 print(client_addr)
 14                 while True:
 15                         recv_data = new_client_socket.recv(1024)
 16                         print(recv_data)
 17                         new_client_socket.send("hahahahok".encode("utf-8"))
 18                 new_client_socket.close()
 19                 print("这次服务到此结束")
 20         tcp_server_socket.close()
 21
 22 if __name__  == "__main__":
 23         main()
~
~
~
~
~

以上为最后完整代码

需要提示:代码逻辑

此次编写代码为python语言模拟服务器端 网络调试助手为客户端
功能为服务器接受客户端发送的数据
所以运行前先保证服务器的开着的(既代码先运行
运行后可以看到命令行处堵塞等待客户端发送数据。
此时网络调试助手点连接网络才可以连的上
同时向服务器发送数据
同时服务器收到客户端发送数据
在这里插入图片描述

发布了41 篇原创文章 · 获赞 0 · 访问量 433

猜你喜欢

转载自blog.csdn.net/weixin_41621686/article/details/104035333