使用socketserver写一个套接字程序
2014-12-28 11:27
447 查看
使用socketserver写一个套接字程序来实现多线程,即服务器端可与多个客户端进行通话,首先服务器端程序为:
客户端源程序为:
其实只有服务器端的源码不同,客户端与之前的用socket写的客户端源码相同。
在这里服务器端要进行多个通话,因此,只是将接收到的字符串大写后然后再进行返回,现在运行服务器端以及两个客户端的结果为:
服务器端:
![](http://img.blog.csdn.net/20141228113352620?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjczNDQ0MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
客户端1:
![](http://img.blog.csdn.net/20141228113537749?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjczNDQ0MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
客户端2:
![](http://img.blog.csdn.net/20141228113614705?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjczNDQ0MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
于是这便实现了多线程的socket通话,其实在这个程序的关键源码为:
socketserver.ThreadingTCPServer((HOST,PORT),MyTCPHandle)
这一行实现了多线程通话,以及这一行:
server.serve_forever() #循环停止,等待它。
这一行的源码效果为不会出现在一个客户端结束后,当前服务器端就会关闭或者报错,而是继续运行,与其他的客户端继续进行通话。
使用socketserver进行多线程通话,就是这样。
#!/usr/bin/python #coding:utf-8 import socketserver class MyTCPHandle(socketserver.BaseRequestHandler): def handle(self): print("recived address:"+format(self.client_address[0])) while True: self.data=self.request.recv(1024*4).strip() print(self.data) self.request.sendall(self.data.upper()) if __name__=="__main__": HOST,PORT="localhost",9999 server=socketserver.ThreadingTCPServer((HOST,PORT),MyTCPHandle) server.serve_forever() #循环停止,等待它。
客户端源程序为:
#!/usr/bin/python #coding:utf-8 import socket HOST,PORT="localhost",9999 data="" sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: sock.connect((HOST,PORT)) while True: data=input("please input a string:") sock.sendall(data.encode('utf-8','strict')) received=sock.recv(1024*4) print(str(received)) except Exception: raise finally: sock.close()
其实只有服务器端的源码不同,客户端与之前的用socket写的客户端源码相同。
在这里服务器端要进行多个通话,因此,只是将接收到的字符串大写后然后再进行返回,现在运行服务器端以及两个客户端的结果为:
服务器端:
客户端1:
客户端2:
于是这便实现了多线程的socket通话,其实在这个程序的关键源码为:
socketserver.ThreadingTCPServer((HOST,PORT),MyTCPHandle)
这一行实现了多线程通话,以及这一行:
server.serve_forever() #循环停止,等待它。
这一行的源码效果为不会出现在一个客户端结束后,当前服务器端就会关闭或者报错,而是继续运行,与其他的客户端继续进行通话。
使用socketserver进行多线程通话,就是这样。
相关文章推荐
- 使用ServerSocket、Socket创建一个简单的服务聊天程序
- 使用vncviewer成功连接red hat linux server 连接失败:套接字操作尝试一个...
- 如何开发一个SocketServer-Client模型的程序
- NioServerSocketChannel 、NioSocketChannel使用一个静态的成员变量来存放provider的原因
- 使用Socket套接字绑定函数bind的一个细节
- 使用ServerSocket建立一个服务端
- python-基于UDP通信的套接字,socketserver模块的使用
- 套接字(socket)编程简单实现server-client聊天程序
- 如何开发一个SocketServer-Client模型的程序
- 【Python】使用socketserver建立一个异步TCP服务器
- Java编程:使用Socket编写一个能多个人聊天的程序
- 一个完整的稳定的,单线程的,有正确的收发功能的使用epoll的socket服务程序
- 使用 Python 编写套接字应用程序 套接字和 SocketServer 模块
- python中实现一个socket和server的程序
- Windows下socket.io环境搭建与使用(做一个一对一聊天程序)
- Python使用Socket写一个聊天程序
- Linux C语言编程-Linux网络通信--Linux上使用套接字(socket)来处理信息---编写一个单进程非阻塞多客户的套接字客户端
- 一个完整的稳定的,单线程的,有正确的收发功能的使用epoll的socket服务程序
- MonitorServer代码阅读笔记(一):使用sigaction( SIGPIPE, &sa, 0)避免写一个已关闭的socket导致进程退出
- 终于搞定了一个C#的聊天室 使用的SQLServer+VS 用的Socket 整理下搜的书签