zoukankan      html  css  js  c++  java
  • Python实现TCP服务端的并发

    服务端的三个条件:
    1、有固定的IP和PORT。
    2、24小时不间断提供服务。
    3、能够支持并发。

    服务端
    # encoding=utf-8
    # auther:lsj
    # 服务端
    
    from multiprocessing import Process
    from threading import Thread
    import socket
    
    """
    服务端的三个条件:
        1、有固定的IP和PORT。
        2、24小时不间断提供服务。
        3、能够支持并发。
    """
    server = socket.socket()  # 括号内不加参数默认就是TCP协议
    server.bind(('127.0.0.1',8080))
    server.listen(5)
    
    # 链接循环
    while True:
        conn, addr = server.accept()
        # 通讯循环
        while True:
            try:
                data = conn.recv(1024)
                # 针对mac linux客户端断开链接后
                if len(data) == 0:break
                print(data.decode('utf8'))
                conn.send(data.upper())
            except ConnectionResetError as e:
                print(e)
                break
        conn.close()

    客户端

    # encoding=utf-8
    # auther:lsj
    # 客户端1
    
    import socket
    client = socket.socket()
    client.connect(('127.0.0.1',8080))
    
    while True:
        client.send(b'hello world')
        data = client.recv(1024)
        print(data.decode('utf-8'))

    第一步:启动服务端。

    第二步:启动一个客户端,看效果,服务端和客户端一直运行。

    第三步:再启动一个客户端,看到该客户端无任何反应。

      针对上面第三步出现的问题对服务端进行改进。

    # encoding=utf-8
    # auther:lsj
    # 服务端
    
    from multiprocessing import Process
    from threading import Thread
    import socket
    
    """
    服务端的三个条件:
        1、有固定的IP和PORT。
        2、24小时不间断提供服务。
        3、能够支持并发。
    """
    server = socket.socket()  # 括号内不加参数默认就是TCP协议
    server.bind(('127.0.0.1',8080))
    server.listen(5)
    
    # 将服务的代码单独封装成一个函数
    def talk(conn):
        # 通讯循环
        while True:
            try:
                data = conn.recv(1024)
                # 针对mac linux客户端断开链接后
                if len(data) == 0:break
                print(data.decode('utf8'))
                conn.send(data.upper())
            except ConnectionResetError as e:
                print(e)
                break
        conn.close()
    
    # 链接循环
    while True:
        conn, addr = server.accept()  # 接客
        # t = Thread(target=talk,args=(conn,)) # 叫其他人来服务客户(线程版)
        t = Process(target=talk,args=(conn,))  # 叫其他人来服务客户(线程版)
        t.start()
  • 相关阅读:
    UML中常用的几种图
    JVM调优问题与总结
    可视化算法学习网站
    [MacOS]查看端口占用进程
    [MacOS]停止"访达"操作,然后再次尝试推出磁盘
    [MacOS]蓝牙重置
    [CentOS7]扩充swap空间
    [5500V5]开启snmpv2
    [Cisco]MDS 9148S 开启snmp v2
    [CentOS7]测试udp端口
  • 原文地址:https://www.cnblogs.com/liunaixu/p/13189023.html
Copyright © 2011-2022 走看看