• 将socket通信实现多进程


    我们知道,使用TCP协议需要提前建立连接,这样就只能一对一的传输,但是这样感觉十分单一,如果实现一个服务器能同时和多个客户端同信了?

    这里就需要用到多线程。

    处理的不同之处就在于:每一个接进来的客户都会创建一个新的进程,这样就能够做到互不干扰

    #服务端
    from  socket import *
    from multiprocessing import Process  #导入模块
    
    server = socket(AF_INET,SOCK_STREAM)
    server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
    server.bind(('127.0.0.1',8130))
    server.listen(5)
    
    def func(conn,addr):
        while True:
            try:
                ret = conn.recv(1024)
                if not ret:break     #liunx下防止客户端断掉之后依旧发送空值
                print(ret.decode('utf-8'))
                conn.send(ret.upper())
            except ConnectionResetError:
                break
    if __name__ == "__main__":
        while True:
            conn,addr = server.accept()   #接进来一个,创建一个子进程
            print("收到来自%s的访问,端口号为%s"% (addr[0],addr[1]))
            p = Process(target = func,args = (conn,addr))
            p.start()

    客户端(基本没有变化):

    #客户端
    from socket import *
    client = socket(AF_INET,SOCK_STREAM)
    client.connect(('127.0.0.1',8130))
    while True:
        data = input(">>>").strip()
        if len(data) == 0:continue
        client.send(data.encode('utf-8'))
        ret = client.recv(1024)
        print(ret.decode('utf-8'))

    结果:

    收到来自127.0.0.1的访问,端口号为56225
    rtyu
    收到来自127.0.0.1的访问,端口号为56226
    fghjk
  • 相关阅读:
    c# 操作数据库
    dataview findrows
    C++:gethostname,gethostbyname获取IP地址和计算机名
    MQTT
    STM32操作外部SRAM
    JAVA中最常用的快捷键总结
    Zstack中End Device设备失去父节点时的重新入网处理方法(转)
    VC++ 重叠窗口
    (转载)PLC内部电路常见的几种形式
    VS2005 DoModal函数
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7923661.html
Copyright © 2020-2023  润新知