博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python网络编程socket之多线程
阅读量:6036 次
发布时间:2019-06-20

本文共 2061 字,大约阅读时间需要 6 分钟。

#coding:utf-8__author__ = 'similarface'import os,socket,threading,SocketServerSERVER_HOST='localhost'SERVER_PORT=0BUF_SIZE=1024ECHO_MSG='HELLO'class ThreadClient():    def __init__(self,ip,port):        #建立sock        self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)        #连接server        self.sock.connect((ip,port))    def run(self):        #获取当前的进程号        current_process_id=os.getpid()        print 'PID %s :" "%s"'%(current_process_id,ECHO_MSG)        sent_data_length = self.sock.send(ECHO_MSG)        print('发送:%d 长数据' % sent_data_length)        #sever response        response=self.sock.recv(BUF_SIZE)        print "PID %s received: %s" % (current_process_id,response)    def shutdown(self):        '''        清理sock的资源        :return:        '''        self.sock.close()class ForkingServerRequestHandler(SocketServer.BaseRequestHandler):    def handle(self):        #接受客户端的数据        data=self.request.recv(BUF_SIZE)        #当前的进程号码        #current_process_id=os.getpid()        current_thread = threading.current_thread()        #返回的数据包        response='%s: %s' % (current_thread.name, data)        print "服务器返回 [current_process_id: data] =[%s]" %response        #发送返回数据        self.request.send(response)        returnclass ForkingServer(SocketServer.ThreadingMixIn,SocketServer.TCPServer):    passdef main():    #建立server    server=ForkingServer((SERVER_HOST,SERVER_PORT),ForkingServerRequestHandler)    #获取IP 和 端口    ip, port = server.server_address # Retrieve the port number    #服务进程    server_thread = threading.Thread(target=server.serve_forever)    #是否放入后台    server_thread.setDaemon(True) # don't hang on exit    #启动    server_thread.start()    print 'Server loop running PID: %s' %os.getpid()    # Launch the client(s)    client1 =  ThreadClient(ip, port)    client1.run()    client2 =  ThreadClient(ip, port)    client2.run()    # Clean them up    server.shutdown()    client1.shutdown()    client2.shutdown()    server.socket.close()if __name__ == '__main__':    main()

  

转载于:https://www.cnblogs.com/similarface/p/5526363.html

你可能感兴趣的文章
HDU 1325 Is It A Tree? 判断是否为一棵树
查看>>
Shell命令-文件压缩解压缩之gzip、zip
查看>>
个人总结
查看>>
uva 673 Parentheses Balance
查看>>
Bzoj 2252: [2010Beijing wc]矩阵距离 广搜
查看>>
css 禁止选中文本
查看>>
bzoj2165
查看>>
tomcat 配置首页
查看>>
算术运算表达式正则及分析
查看>>
Oracle 12c 多租户 手工创建 pdb 与 手工删除 pdb
查看>>
shell初涉
查看>>
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)
查看>>
ASP.NET 中设置路径的三种方式
查看>>
EBS使用 Distributed AD在多个节点并行adpatch
查看>>
windows添加和删除服务
查看>>
关于云栖,有点无语的几个地方,管理能不能管?
查看>>
Windows线程的同步与互斥
查看>>
C#进阶系列——MEF实现设计上的“松耦合”(四):构造函数注入
查看>>
AngularJs ng-change事件/指令(转)
查看>>
linux系统下安装两个或多个tomcat
查看>>