python -- 单线程、多线程SocketServer
2017-07-15 10:29
405 查看
python – 单线程、多线程SocketServer
python中的TCPServer类属于单线程,ThreadingTCPServer类属于多线程类
———1.多线程SocketServer链接,客户端不显示命令内容————————-
服务器端:
客户端:
运行情况
服务器端:
客户端1:
客户端2:
=====2.多线程SocketServer链接,客户端显示命令内容==============
服务器端:
客户端1:
运行情况
服务器:
客户端1:
客户端2:
python中的TCPServer类属于单线程,ThreadingTCPServer类属于多线程类
———1.多线程SocketServer链接,客户端不显示命令内容————————-
服务器端:
root@kali:~/python/socket# pwd /root/python/socket root@kali:~/python/socket# ls ftp socket_server_mult_line.py socket_server_ok.py socket_server.py socket_server_using.py tab.py tab.pyc root@kali:~/python/socket# cat socket_server_mult_line.py #/usr/bin/python #!--*-- coding:utf-8 --*-- import SocketServer#导入SocketServer模块 class myTCPHandler(SocketServer.BaseRequestHandler):#定义myTCPHandler类继承SocketServer.BaseRequestHandler的类 def handle(self):#定义handle函数 print 'got connection from:', self.client_address while 1: self.data = self.request.recv(4096)#定义数据 print self.data #format_data = '\033[32;lm%s \033[0m' %self.data#定义颜色编码格式 #self.request.sendall(format_data.upper())#对输入的数据进行大写输出返回 self.request.sendall(self.data)#返回数据 host,port = '',9988#定义主机与端口 server = SocketServer.ThreadingTCPServer((host,port),myTCPHandler)#使用元组把主机和端口都绑定到myTCPHandler类中 #python中的TCPServer类属于单线程,ThreadingTCPServer类属于多线程类 server.serve_forever()#激活server,并一直使其运行 root@kali:~/python/socket#
客户端:
root@kali:~/python/socket# pwd /root/python/socket root@kali:~/python/socket# ls ftp socket_client_mutl_line.py socket_client_ok.py socket_client.py socket_client_using.py tab.py tab.pyc root@kali:~/python/socket# cat socket_client_mutl_line.py #!/usr/bin/python # --*-- coding:utf-8 --*-- #客户端的地址ip192.168.72.130,编写文件为socket_client.py import socket#导入socket模块 import tab from time import sleep#导入时间模块,并使用sleep功能 host = '192.168.72.129'#服务器端的ip地址 port = 9988#服务器端的端口 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#启用ipv4的tcp/ip协议与类型 s.connect((host,port))#连接服务器端的主机与端口 #--------以上为客户端的代码信息------------- #--------以下为客户端发送一次性的信息,有while 1:才是死循环发送信息----- while 1:#一直等待客户端输入命令给服务器端 input = raw_input('please input system command:')#输入要使用的系统命令 s.send(input)#客户端发送的信息 data = s.recv(4096)#服务器端返回信息就赋值给data print 'received from server:',data#打印返回的信息 s.close()#不返回信息就断开连接 root@kali:~/python/socket#
运行情况
服务器端:
root@kali:~/python/socket# lsof -i :9988 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python 2825 root 3u IPv4 99736 0t0 TCP *:9988 (LISTEN) python 2825 root 4u IPv4 101267 0t0 TCP 192.168.72.129:9988->192.168.72.130:49141 (ESTABLISHED) python 2825 root 5u IPv4 101290 0t0 TCP 192.168.72.129:9988->192.168.72.130:49142 (ESTABLISHED) root@kali:~/python/socket# kill -9 2825 root@kali:~/python/socket# lsof -i :9988 [1]+ Killed python socket_server_mult_line.py root@kali:~/python/socket# python socket_server_mult_line.py Traceback (most recent call last): File "socket_server_mult_line.py", line 17, in <module> server = SocketServer.ThreadingTCPServer((host,port),myTCPHandler)#使用元组把主机和端口都绑定到myTCPHandler类中 File "/usr/lib/python2.7/SocketServer.py", line 419, in __init__ self.server_bind() File "/usr/lib/python2.7/SocketServer.py", line 430, in server_bind self.socket.bind(self.server_address) File "/usr/lib/python2.7/socket.py", line 224, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 98] Address already in use root@kali:~/python/socket# root@kali:~/python/socket# python socket_server_mult_line.py Traceback (most recent call last): File "socket_server_mult_line.py", line 17, in <module> server = SocketServer.ThreadingTCPServer((host,port),myTCPHandler)#使用元组把主机和端口都绑定到myTCPHandler类中 File "/usr/lib/python2.7/SocketServer.py", line 419, in __init__ self.server_bind() File "/usr/lib/python2.7/SocketServer.py", line 430, in server_bind self.socket.bind(self.server_address) File "/usr/lib/python2.7/socket.py", line 224, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 98] Address already in use root@kali:~/python/socket# python socket_server_mult_line.py got connection from: ('192.168.72.130', 49157) got connection from: ('192.168.72.130', 49158) uname -a ls -a pwd ls -a df df -h
客户端1:
root@kali:~/python/socket# lsof -i :9988 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python 2450 root 3u IPv4 99388 0t0 TCP 192.168.72.130:49141->192.168.72.129:9988 (CLOSE_WAIT) python 2451 root 3u IPv4 99389 0t0 TCP 192.168.72.130:49142->192.168.72.129:9988 (CLOSE_WAIT) root@kali:~/python/socket# kill -9 2450 root@kali:~/python/socket# kill -9 2451 [1]+ Killed python socket_client_mutl_line.py root@kali:~/python/socket# lsof -i :9988 root@kali:~/python/socket# python socket_client_mutl_line.py Traceback (most recent call last): File "socket_client_mutl_line.py", line 12, in <module> s.connect((host,port))#连接服务器端的主机与端口 File "/usr/lib/python2.7/socket.py", line 224, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 111] Connection refused root@kali:~/python/socket# python socket_client_mutl_line.py Traceback (most recent call last): File "socket_client_mutl_line.py", line 12, in <module> s.connect((host,port))#连接服务器端的主机与端口 File "/usr/lib/python2.7/socket.py", line 224, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 111] Connection refused root@kali:~/python/socket# python socket_client_mutl_line.py please input system command:ls -a received from server: ls -a please input system command:df received from server: df please input system command:df -h received from server: df -h please input system command:
客户端2:
root@kali:~/python/socket# lsof -i :9988 root@kali:~/python/socket# python socket_client_mutl_line.py please input system command:uname -a received from server: uname -a please input system command:ls -a received from server: ls -a please input system command:pwd received from server: pwd please input system command:
=====2.多线程SocketServer链接,客户端显示命令内容==============
服务器端:
root@kali:~/python/socket# pwd /root/python/socket root@kali:~/python/socket# ls ftp socket_server_mult_line.py socket_server_ok.py socket_server.py socket_server_using.py tab.py tab.pyc root@kali:~/python/socket# cat socket_server_ socket_server_mult_line.py socket_server_ok.py socket_server_using.py root@kali:~/python/socket# cat socket_server_mult_line.py #/usr/bin/python #!--*-- coding:utf-8 --*-- import os import SocketServer#导入SocketServer模块 class myTCPHandler(SocketServer.BaseRequestHandler):#定义myTCPHandler类继承SocketServer.BaseRequestHandler的类 def handle(self):#定义handle函数 print 'got connection from:', self.client_address#显示客户端IP地址 while 1: self.data = self.request.recv(4096)#定义数据 if not self.data:continue#如果不是系统命令继续执行以下语句 print 'will run this on server:', self.data cmd = os.popen(self.data)#用户输入信息作为系统命令执行 result = cmd.read()#读取命令内容 #format_data = '\033[32;lm%s \033[0m' %self.data#定义颜色编码格式 #self.request.sendall(format_data.upper())#对输入的数据进行大写输出返回 self.request.sendall(result)#返回数据至客户端 host,port = '',9988#定义主机与端口 server = SocketServer.ThreadingTCPServer((host,port),myTCPHandler)#使用元组把主机和端口都绑定到myTCPHandler类中 #python中的TCPServer类属于单线程,ThreadingTCPServer类属于多线程类 server.serve_forever()#激活server,并一直使其运行 root@kali:~/python/socket#
客户端1:
root@kali:~/python/socket# pwd /root/python/socket root@kali:~/python/socket# ls ftp socket_client_mutl_line.py socket_client_ok.py socket_client.py socket_client_using.py tab.py tab.pyc root@kali:~/python/socket# cat socket_client_mutl_line.py #!/usr/bin/python # --*-- coding:utf-8 --*-- #客户端的地址ip192.168.72.130,编写文件为socket_client.py import socket#导入socket模块 import tab from time import sleep#导入时间模块,并使用sleep功能 host = '192.168.72.129'#服务器端的ip地址 port = 9988#服务器端的端口 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#启用ipv4的tcp/ip协议与类型 s.connect((host,port))#连接服务器端的主机与端口 #--------以上为客户端的代码信息------------- #--------以下为客户端发送一次性的信息,有while 1:才是死循环发送信息----- while 1:#一直等待客户端输入命令给服务器端 input = raw_input('please input system command:')#输入要使用的系统命令 s.send(input)#客户端发送的信息 data = s.recv(4096)#服务器端返回信息就赋值给data print 'received from server:',data#打印返回的信息 s.close()#不返回信息就断开连接 root@kali:~/python/socket#
运行情况
服务器:
root@kali:~/python/socket# python socket_server_mult_line.py got connection from: ('192.168.72.130', 49175) got connection from: ('192.168.72.130', 49176) will run this on server: ls will run this on server: uname -a will run this on server: df -h will run this on server: ls -a
客户端1:
root@kali:~/python/socket# python socket_client_mutl_line.py please input system command:ls received from server: ftp socket_server_mult_line.py socket_server_ok.py socket_server.py socket_server_using.py tab.py tab.pyc please input system command:df -h received from server: 文件系统 容量 已用 可用 已用% 挂载点 rootfs 19G 8.4G 9.5G 47% / udev 10M 0 10M 0% /dev tmpfs 109M 568K 108M 1% /run /dev/disk/by-uuid/1d69c4b7-8825-4a6e-a4a4-e1ef94f2d30f 19G 8.4G 9.5G 47% / tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 393M 224K 393M 1% /run/shm please input system command:
客户端2:
root@kali:~/python/socket# python socket_client_mutl_line.py please input system command:uname -a received from server: Linux kali 3.18.0-kali1-686-pae #1 SMP Debian 3.18.3-1~kali4 (2015-01-22) i686 GNU/Linux please input system command:ls -a received from server: . .. ftp socket_server_mult_line.py socket_server_ok.py socket_server.py socket_server_using.py tab.py tab.pyc please input system command:
相关文章推荐
- Python使用TCPServer编写(多线程)Socket服务
- Python2 socket 多线程并发 ThreadingTCPServer Demo
- Python 模块(八) socketserver 以及 线程、进程
- Python2 socket 多线程并发 TCPServer Demo
- 万恶的单线程!!怎样才能实现一个真正的多线程的php socket server啊!!!
- 基于socketserver的python多线程聊天室
- Python使用TCPServer编写(多线程)Socket服务
- python -- 多线程SocketServer2
- Python使用TCPServer编写(多线程)Socket服务
- 实现服务器端的多线程SOCKET Server(独立监听线程)
- Python基础学习(5)网络编程socket、文件上传、粘包问题、socketserver、IO多路复用、线程与进程、进程池、线程池、上下文管理、协程
- python开发学习-day08(socket高级、socketserver、进程、线程)
- Python使用TCPServer编写(多线程)Socket服务
- 使用Python SocketServer快速实现多线程网络服务器
- Python使用TCPServer编写(多线程)Socket服务
- Python2 socket TCPServer 多线程并发 超时关闭
- 简单的现实多线程的Socket网络通信,对前面一篇的补充的加入线程
- Python SocketServer源码分析
- Python之socketserver源码分析
- Java笔记(9)-网络编程、URL、InetAddress、套接字、Socket、ServerSocket、多线程、UDP、广播数据包、远程调用