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

将socket通信实现多进程

时间:2017-12-20 16:59:23      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:端口   ==   except   导入模块   防止   print   div   gpo   处理   

我们知道,使用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

 

将socket通信实现多进程

标签:端口   ==   except   导入模块   防止   print   div   gpo   处理   

原文地址:http://www.cnblogs.com/yangmingxianshen/p/7923661.html

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