• 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()
  • 相关阅读:
    Maven报错找不到jre
    SpringBoot学习记(一)第一个SpringBoot Web服务
    (转!)大话websocket
    (转!)Netdata---Linux系统性能实时监控平台部署
    Jmeter(四十三)WebSocket Sampler 和 Ajax Request
    Jmeter(四十二)Jmeter工作原理
    Centos7安装docker(转!)
    es6 数组去重
    数组对象根据某个值相同合并分组
    await在forEach不起作用解决【await is a reserved word】
  • 原文地址:https://www.cnblogs.com/liunaixu/p/13189023.html
Copyright © 2020-2023  润新知