码迷,mamicode.com
首页 > 系统相关 > 详细

一个简单的基于多进程实现并发的Socket程序

时间:2018-05-29 13:13:27      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:err   运行   src   continue   链接   cli   bind   pen   serve   

  在单进程的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的交互过程~

一个简单的基于多进程实现并发的Socket程序

标签:err   运行   src   continue   链接   cli   bind   pen   serve   

原文地址:https://www.cnblogs.com/paulwhw/p/9104440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!