zoukankan      html  css  js  c++  java
  • 一个简单的基于多进程实现并发的Socket程序

      在单进程的socket的程序的基础上,实现多进程并发效果的思路具体是:在server端开启“链接循环”,每建立一次链接就生成一个Process对象进行server-client的互动,而client端不用做任何变化,因为对于client来说每运行一次程序就相当于与server端建立了一个链接。

      具体代码如下:

    # -*- coding: utf-8  -*-
    # -*- Author: WangHW -*-
    import socket
    import os
    from multiprocessing import Process
    
    #多进程开启的程序
    def talk(conn):
        # 通信循环
        while 1:
            try:
                data = conn.recv(1024)
                if not data:
                    break
                print('client <%s> data:%s' %(os.getpid(),data.decode('utf-8')))
                conn.send(data.upper())
            except ConnectionResetError:
                break
        conn.close()
    
    #socket建立连接循环的程序
    def server(ip,port):
        whw_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        whw_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        whw_server.bind((ip,port))
        whw_server.listen(5)
        # 链接循环
        while 1:
            conn, addr = whw_server.accept()
            #生成对象,每建立一个链接就启动一个进程
            p = Process(target=talk,args=(conn,))
            p.start()
    
    
    if __name__ == '__main__':
        server('127.0.0.1',9000)
    Server.py
    # -*- coding: utf-8  -*-
    # -*- Author: WangHW -*-
    import socket
    
    whw_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    whw_client.connect(('127.0.0.1',9000))
    
    while 1:
        msg = input('>>>:').strip()
        if not msg:
            continue
        whw_client.send(msg.encode('utf-8'))
        data = whw_client.recv(1024)
        print('Server Data:',data.decode('utf-8'))
    Client.py

      运行效果如下:

      如上图所示:我们可以看到不同进程(由ID标识)的client与server的交互过程~

  • 相关阅读:
    2013-11-23 sentence patterns
    面试题 盛水 twitter
    Uva 10025 The ? 1 ? 2 ? ... ? n = k problem
    FTP服务(5)客户连接常见故障现象
    FTP服务(4)基于MySQL数据库认证
    FTP服务(3)实现基于文件验证的vsftpd虚拟用户
    FTP服务(2)实现基于SSL的FTPS
    FTP服务(1)
    Apache httpd服务
    Apache httpd服务——常用配置
  • 原文地址:https://www.cnblogs.com/paulwhw/p/9104440.html
Copyright © 2011-2022 走看看