zoukankan      html  css  js  c++  java
  • Python中的Tcp协议应用之TCP服务端-协程版(推荐)

    利用gevent第三方库,实现协程。

    通过协程实现一个服务端服务多个客户端需求。

    使用协程的好处是协程比线程更加节省内存资源。

    gevent安装命令:

    pip3 install gevent

    注意:在安装gevent库之前,需要更新pip版本,只需要在终端窗口执行以下命令即可:

    python -m pip install --upgrade pip 

    TCP服务端-协程版本:

     1 import socket
     2 import gevent
     3 from gevent import monkey
     4 
     5 # 打补丁
     6 monkey.patch_all()
     7 
     8 
     9 def handle_client_socket(new_socket, ip_port):
    10     print("建立连接成功:", ip_port)
    11     while True:
    12         recv_data = new_socket.recv(1024)
    13         if recv_data:
    14             recv_data_decode = recv_data.decode("UTF-8")
    15             print("服务端接收的数据为:", recv_data_decode)
    16         else:
    17             print("客户端下线了", ip_port)
    18             break
    19         # 8.使用新的套接字发送数据
    20         send_data_input = input("请输入回复的消息:")
    21         send_data = send_data_input
    22         send_data_encode = send_data.encode("UTF-8")
    23         new_socket.send(send_data_encode)
    24         # 7.使用新的套接字接收数据,并设置最大数据接收长度为1024
    25 
    26     # 9.关闭套接字
    27     # 与客户端断开通信
    28     new_socket.close()
    29 
    30 
    31 # 1.导入模块
    32 if __name__ == '__main__':
    33     # 2.创建套接字对象
    34     tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    35 
    36     # 3.设置端口复用
    37     tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    38 
    39     # 4.绑定端口
    40     tcp_server_socket.bind(("", 9090))
    41 
    42     # 5.设置监听,并设置最大等待连接数为128
    43     tcp_server_socket.listen(128)
    44     while True:
    45         # 6.等待客户端建立连接,并接收accpet()返回的新的套接字对象,和客户端IP+端口号
    46         new_socket, ip_port = tcp_server_socket.accept()
    47         gevent.spawn(handle_client_socket, new_socket, ip_port)
    48 
    49     # 停止服务端服务
    50     # tcp_server_socket.close()
    该花的钱要花,该吃的饭要吃。
  • 相关阅读:
    es6之Promise
    es6之Proxy,Reflect
    js之对象
    Set,Map与Array,Object对比
    es6之数据结构 set,WeakSet,mapWeakMap
    es6之Symbol
    flex布局
    盒子模型,top和margin-top
    POJ1274-The Perfect Stall
    Codeforces 671D. Roads in Yusland 题解
  • 原文地址:https://www.cnblogs.com/chao666/p/12002159.html
Copyright © 2011-2022 走看看