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()
  • 相关阅读:
    JEECG与帆软报表集成
    各种数据库的锁表和解锁操作
    sql server数据库查询超时报错
    java项目部署后的文件路径获取
    js解决跨站点脚本编制问题
    java递归算法实现拼装树形JSON数据
    FreeMarker中的list集合前后台代码
    去除list集合中重复项的几种方法
    Java中Properties类的操作
    mysql 容灾 灾备 备份
  • 原文地址:https://www.cnblogs.com/liunaixu/p/13189023.html
Copyright © 2011-2022 走看看