python socket多线程
2016-01-02 21:56
721 查看
上节一个服务器只能连接一个客户端,要想一个服务器连接多个客户端就需要运用多线程来实现,每来一个连接就创建一个线程来和此客户端进行对话,这样就能实现并发,而非客户端等待。
一、原理:
SocketServer类帮我们实现了多线程,不必自己去创建线程,结束线程。它所做的就是客户端请求连接,服务器就从线程池中取出一个线程,和客户端进行通信,然后把它放入连接池中,这就表明该线程目前正在被使用。客户端断开连接后,线程又被线程池回收。这对用户来说都是透明的,不必去关心。线程池中线程数量多少,这个就要看服务器性能高低了。二、实现:
服务器端:import SocketServer class MyTCPHandler(SocketServer.BaseRequestHandler): <span style="white-space:pre"> </span>def handle(self): <span style="white-space:pre"> </span>while 1: <span style="white-space:pre"> </span>self.data = self.request.recv(1024).strip() <span style="white-space:pre"> </span>print "{} wrote:".format(self.client_address[0]) <span style="white-space:pre"> </span>if not self.data: <span style="white-space:pre"> </span>print "client %s is dead!" % self.client_address[0] <span style="white-space:pre"> </span>break <span style="white-space:pre"> </span>self.request.sendall(self.data.upper()) if __name__ == "__main__": <span style="white-space:pre"> </span>host, port = "localhost", 20001 <span style="white-space:pre"> </span>server = SocketServer.ThreadingTCPServer((host, port), MyTCPHandler) <span style="white-space:pre"> </span>server.serve_forever()有几点要说明:
1、使用多线程socket需包含SocketServer类
2、我们创建一个类去处理客户端发来的请求时,创建的类必须继承SocketServer.BaseRequestHandler基类
3、创建的类必须实现handle方法
4、if __name__ == "__main__"这句表示如果是直接运行就执行下面代码,否则(模块导入)不执行。
客户端:
<span style="font-size:24px;">import socket import os, time host = '127.0.0.1' port = 20001 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) while 1: cmd = raw_input('your command:').strip() s.sendall(cmd) data = s.recv(1024) print data s.close() os.system('pause')</span>
运行结果:
相关文章推荐
- Python安装指南
- python coding style guide 的快速落地实践
- python 代码片段2
- python 代码片段
- python实现onvif协议-2
- 欢迎使用CSDN-markdown编辑器
- Python比较for循环、列表解析、迭代器、map之间运算时间关系
- Python的栈
- 为Eclipse安装Python开发插件
- leetcode之Spiral Matrix II
- python基础-面向对象
- Pyhton 2.5 高级特性
- Python3 字典使用上的一个小细节
- python爬取豆瓣电影信息
- Python解析配置文件模块:ConfigPhaser
- Tkinter 8.5 参考手册: a GUI for Python (四)
- Tkinter 8.5 参考手册: a GUI for Python (三)
- Tkinter 8.5 参考手册: a GUI for Python (二)
- Tkinter 8.5 参考手册: a GUI for Python(一)
- leetcode之Spiral Matrix