#通过socket 实现简单的ssh#服务端

 #服务端
import os
import socket server = socket.socket() #server.bind(('0.0.0.0',9999))
server.bind(('localhost',9999))
server.alisten() while True:
conn,addr = server.accept()
print ('new conn:',addr)
while True:
print ('等待新指令')
data = conn.recv(1024)
if not data:
print ('客户端已经断开')
break print ('执行指令:',data)
cmd_res = os.poen(data.decode()).read()#接收字符串,执行结果也是字符串
print('before send',len(cmd_res))
if len(cmd_res) == 0 :
cmd_res = 'cmd has no output...' conn.send(str(len(cmd_res.encode())).encode('utf-8')) #先发文件大小给客户端
conn.send(cmd_res.encode('utf-8'))
print('send done') server.close()

#通过socket 实现简单的ssh#服务端

 #通过socket 实现简单的ssh#客户端

 #客户端

 import socket

 client = socket.socket()

 #client.connect(('192.168.16.200',9999))
client.connect(('localhost',9999)) while True:
cmd =input('>>>>:').strip()
if len(cmd) == 0:continue
client.send(cmd.encode('utf-8')) cmd_rer_size = client.recv(1024)#接收命令结果的长度(文件大小)
#cmd_res = client.recv(1024) print ('命令结果大小:',cmd_res._size) received_size = 0 received_data = b'' while received_size < int(cmd_res_size.decode()):
data = client.recv(1024)
received_size += len(data) #每次收到的有可能小于1024,所以必须用len判断
#print (data.decode())
#print (received_size)
received_data += data else:
print (' cmd res receive done...',received_size)
print (received_data.decode()) client.close()

#通过socket 实现简单的ssh#客户端

 '''

 #通过socket接收大数据2#服务端

 #通过socket 实现简单的ssh#服务端

 #服务端A
import time
import os
import socket server = socket.socket() server.bind(('0.0.0.0',9999))
#server.bind(('localhost',9999))
server.listen() while True:
conn,addr = server.accept()
print ('new conn:',addr)
while True:
print ('等待新指令')
data = conn.recv(1024)
if not data:
print ('客户端已经断开')
break print ('执行指令:',data)
cmd_res = os.popen(data.decode()).read()#接收字符串,执行结果也是字符串
print('before send',len(cmd_res))
if len(cmd_res) == 0 :
cmd_res = 'cmd has no output...' conn.send(str(len(cmd_res.encode())).encode('utf-8')) #先发文件大小给客户端
#time.sleep(0.5) #socket 粘包,解决方法不好 client_ack = conn.recv(1024) #等待客户端确认
print ('ack from client:',client_ack) conn.send(cmd_res.encode('utf-8'))
print('send done') server.close() '''
'''
import hashlib
m = hashlib.md5
m.update(b'test')
m.update(b'abc') ''' ''' #服务端B
import hashlib
import time
import os
import socket server = socket.socket() server.bind(('0.0.0.0',9999))
#server.bind(('localhost',9999))
server.listen() while True:
conn,addr = server.accept()
print ('new conn:',addr)
while True:
print ('等待新指令')
data = conn.recv(1024)
if not data:
print ('客户端已经断开')
break cmd,filename = data.decode().split()
print (filename) if os.path.isfile(filename):
f =open(filename,'rb')
m=hashlib.md5()
file_size =os.stat(filename).st_size
conn.send(str(file_size).encode())#文件大小
conn.recv(1024)#等待 ack
for line in f:
#m.update(line)
conn.send(line)
#print ('file md5',m.hexdigest())
f.close()
print('send done') server.close() ''' #服务端C
import hashlib
import time
import os
import socket server = socket.socket() server.bind(('0.0.0.0',9999))
#server.bind(('localhost',9999))
server.listen() while True:
conn,addr = server.accept()
print ('new conn:',addr)
while True:
print ('等待新指令')
data = conn.recv(1024)
if not data:
print ('客户端已经断开')
break cmd,filename = data.decode().split()
print (filename) if os.path.isfile(filename):
f =open(filename,'rb')
m=hashlib.md5()
file_size =os.stat(filename).st_size
conn.send(str(file_size).encode())#文件大小
conn.recv(1024)#等待 ack
for line in f:
m.update(line)
conn.send(line)
print ('file md5',m.hexdigest())
f.close()
conn.send(m.hexdigest().encode())#mp5 print('send done') server.close()

#通过socket接收大数据2#服务端

 '''
#通过socket接收大数据2#客户端 #通过socket 实现简单的ssh#客户端 #客户端A import socket client = socket.socket() #client.connect(('192.168.80.20',9999))
client.connect(('localhost',9999)) while True:
cmd =input('>>>>:').strip()
if len(cmd) == 0:continue
client.send(cmd.encode('utf-8')) cmd_rer_size = client.recv(1024)#接收命令结果的长度(文件大小)
#cmd_res = client.recv(1024) print ('命令结果大小:',cmd_res._size)
client.send('准备好接收了,loser可以发了'.encode('utf-8'))
received_size = 0 received_data = b'' while received_size < int(cmd_res_size.decode()):
data = client.recv(1024)
received_size += len(data) #每次收到的有可能小于1024,所以必须用len判断
#print (data.decode())
#print (received_size)
received_data += data else:
print (' cmd res receive done...',received_size)
print (received_data.decode()) client.close() ''' '''
#客户端B import socket client = socket.socket() #client.connect(('192.168.80.20',9999))
client.connect(('localhost',9999)) while True:
cmd =input('>>>>:').strip()
if len(cmd) == 0:continue
if cmd.startswith('get'):
client.send(cmd.encode())
server_response = client.recv(1024)
print ('servr response',server_response)
client.send(b'ready to recv file')
file_total_size = int (server_response.decode())
received_size = 0
filename = cmd.split()[1]
f =open (filename +'.new','wb')
while received_size < file_total_size:
data =client.recv(1024)
received_size += len(data)
f.write(data)
#print (file_total_size,received_size)
else:
print('file recv done',received_size,file_total_size)
f.close()
client.close() ''' #客户端C import socket
import hashlib
client = socket.socket() #client.connect(('192.168.80.20',9999))
client.connect(('localhost',9999)) while True:
cmd =input('>>>>:').strip()
if len(cmd) == 0:continue
if cmd.startswith('get'):
client.send(cmd.encode())
server_response = client.recv(1024)
print ('servr response',server_response)
client.send(b'ready to recv file')
file_total_size = int (server_response.decode())
received_size = 0
filename = cmd.split()[1]
f = open (filename +'.new','wb')
m = hashlib.md5() while received_size < file_total_size:
if file_total_size - received_size > 1024 :#要收不止一次
size =1024
else: #最后一次了,剩下多少收多少
size = file_total_size - received_size
print ('lastreceive:',size)
data =client.recv(size)
received_size += len(data)
m.update(data)
f.write(data)
#print (file_total_size,received_size)
else:
new_file_md5 = m.hexdigest()
print('file recv done',received_size,file_total_size)
f.close()
server_file_md5 = client.recv(1024)
print ('server file md5:',server_file_md5)
print ('clientr file md5:',new_file_md5) client.close()

#通过socket接收大数据2#客户端

 #socketserver基本使用#服务器端
'''
1 你必须创建一个请求处理类。并且这个类要继承BaseRequestHandler,
并且还要重写父亲类的handle() 2 你必须实例化TCPServer,并且传递server ip 和你上面创建的请求处理类
给这个TCPServer 3 调用 Server.handle_request()#只处理一个请求
Server.serve_forever()#处理多个请求,并且永远执行 4 关闭服务
''' #socketserver基本使用 import socketserver class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
while True:
try:
self.data =self.request.recv(1024).strip()
print ('{} wrote:'.format(self.client_address[0]))
print (self.data)
self.request.send(self.data.upper())
except ConnectionResetError as e:
print ('err,e')
break if __name__ == '__main__':
HOST,PORT = 'localhost',9999
server = socketserver.TCPServer((HOST,PORT),MyTCPHandler)
server.serve_forever()

#socketserver基本使用#服务器端

 #socketserver基本使用#客户端
'''
1 你必须创建一个请求处理类。并且这个类要继承BaseRequestHandler,
并且还要重写父亲类的handle() 2 你必须实例化TCPServer,并且传递server ip 和你上面创建的请求处理类
给这个TCPServer 3 调用 Server.handle_request()#只处理一个请求
Server.serve_forever()#处理多个请求,并且永远执行 4 关闭服务
''' #socketserver基本使用#客户端 import socket client = socket.socket()#声明socket类型,同时生成socket连接对象 client.connect(('localhost',9999)) while True:
msg =input('>>:').strip()
if len(msg) == 0:continue
client.send(msg.encode('utf-8'))
data = client.recv(10240)
print ('recv:',data.decode()) client.close()

#socketserver基本使用#客户端

 #socketserver 多线程(多并发)使用#服务端
'''
1 你必须创建一个请求处理类。并且这个类要继承BaseRequestHandler,
并且还要重写父亲类的handle() 2 你必须实例化TCPServer,并且传递server ip 和你上面创建的请求处理类
给这个TCPServer 3 调用 Server.handle_request()#只处理一个请求
Server.serve_forever()#处理多个请求,并且永远执行 4 关闭服务
'''
#普通socket地址重用
#server = socket.socket() #获得socket实例
#server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #socketserver 地址重用
#self.allow_reuse_address import socketserver class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
while True:
try:
self.data =self.request.recv(1024).strip()
print ('{} wrote:'.format(self.client_address[0]))
print (self.data)
self.request.send(self.data.upper())
except ConnectionResetError as e:
print ('err,e')
break if __name__ == '__main__':
HOST,PORT = 'localhost',9999 server = socketserver.ThreadingTCPServer((HOST,PORT),MyTCPHandler)
server.serve_forever()

#socketserver 多线程(多并发)使用#服务端

 #socketserver 多进程使用#服务端 WIN不能使用
'''
1 你必须创建一个请求处理类。并且这个类要继承BaseRequestHandler,
并且还要重写父亲类的handle() 2 你必须实例化TCPServer,并且传递server ip 和你上面创建的请求处理类
给这个TCPServer 3 调用 Server.handle_request()#只处理一个请求
Server.serve_forever()#处理多个请求,并且永远执行 4 关闭服务
''' import socketserver class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
while True:
try:
self.data =self.request.recv(1024).strip()
print ('{} wrote:'.format(self.client_address[0]))
print (self.data)
self.request.send(self.data.upper())
except ConnectionResetError as e:
print ('err,e')
break if __name__ == '__main__':
HOST,PORT = 'localhost',9999
server = socketserver.ForkingTCPServer((HOST,PORT),MyTCPHandler)
server.serve_forever()

#socketserver 多进程使用#服务端 WIN不能使用

#socket #socketserver的更多相关文章

  1. socket - socketserver - start TCP server

    前面提到如何使用socket模块启动tcpserver: 创建socket:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 绑定ip: ...

  2. python网络编程socket /socketserver

    提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...

  3. python3之socket&socketserver网络编程

    1.套接字与套接模块 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了 ...

  4. python Socket socketserver

    Socket 套接字 socket的 类型 实现socket对象时传入 到socket 类中 socket.AF_INET 服务器间的通讯 IPv4 socket.AF_INET6 IPv6 sock ...

  5. 进度条 --- socket ---socketserver

    TCP:可靠的面向连接的协议,传输效率低,全双工通信,流数据传输.运用:web浏览器,电子邮件,文件传输程序 UDP:不可靠的,无连接的服务,传输效率高,面向数据包的传输,只能发短消息.运用:dns ...

  6. socket&socketserver网络编程

    1.套接字与套接模块 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了 ...

  7. Python学习之UDP版socket&SocketServer

    7.6 基于UDP的socket 无连接的,不必与对方建立连接,而是直接把数据发送给对方: 适用于一次传输销量数据结构,可靠性不高的应用环境,因为其传输速率快 # 服务端 import socket ...

  8. 小菜学习Winform(三)Socket点对点通信

    前言 Socket的英文原义是“孔”或“插座”,其实在网络编程中Socket就是这个意思,就像我们打电话,要首先知道对方的手机号一样,这个手机号就相当于一个Socket号.一个插座,在网络编程中就是i ...

  9. socketserver 分块记录

    网络编程 Socket(TCP,IP)套接字 服务端 运行起来, 客户端 客户端 客户端 客户端 服务端: import socket sk = socket.socket() #绑定端口号 sk.b ...

随机推荐

  1. 网站PC端和移动端,用户通过设备识别

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!--<me ...

  2. 【BZOJ4407】于神之怒加强版

    题面 题目分析 \[ \begin{split} \sum\limits_{i=1}^n\sum\limits_{j=1}^mgcd(i,j)^k&=\sum\limits_{d=1}^nd^ ...

  3. Stopwatch 计时器类

    C#_Stopwatch 类   命名空间:System.Diagnostics Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 Stopwatc ...

  4. 【JZOJ2288】【BZOJ1898】【luoguP2579】沼泽鳄鱼

    description 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客. 为了让游玩更有情趣,人们在池塘的中央建设了 ...

  5. ros Python找不到msg包的问题解决办法

    https://answers.ros.org/question/113671/catkin-package-cannot-find-own-message-type-python/ 原因是因为.py ...

  6. JavaSE_12_Properties类和缓冲流

    1.Properties类 java.util.Properties 继承于Hashtable ,来表示一个持久的属性集.它使用键值结构存储数据,每个键及其对应值都是一个字符串.该类也被许多Java类 ...

  7. js页面的弹框怎么关闭啊

    1.单纯的关闭window.opener.location.reload(); //刷新父窗口中的网页window.close();//关闭当前窗窗口2.提交后关闭 function save(){d ...

  8. Java-Druid:目录

    ylbtech-Java-Druid:目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://yl ...

  9. PKU--3628 Bookshelf 2(01背包)

    题目http://poj.org/problem?id=3628 分析:给定一堆牛的高度,把牛叠加起来的高度超过牛棚的高度. 且是牛叠加的高度与牛棚高度之差最小. 把牛叠加的高度看作是背包的容量,利用 ...

  10. elasticsearch 中文API 索引(三)

    索引API 索引API允许开发者索引类型化的JSON文档到一个特定的索引,使其可以被搜索. 生成JSON文档 有几种不同的方式生成JSON文档 利用byte[]或者作为一个String手动生成 利用一 ...