#socket #socketserver
- #通过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的更多相关文章
- socket - socketserver - start TCP server
前面提到如何使用socket模块启动tcpserver: 创建socket:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 绑定ip: ...
- python网络编程socket /socketserver
提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...
- python3之socket&socketserver网络编程
1.套接字与套接模块 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了 ...
- python Socket socketserver
Socket 套接字 socket的 类型 实现socket对象时传入 到socket 类中 socket.AF_INET 服务器间的通讯 IPv4 socket.AF_INET6 IPv6 sock ...
- 进度条 --- socket ---socketserver
TCP:可靠的面向连接的协议,传输效率低,全双工通信,流数据传输.运用:web浏览器,电子邮件,文件传输程序 UDP:不可靠的,无连接的服务,传输效率高,面向数据包的传输,只能发短消息.运用:dns ...
- socket&socketserver网络编程
1.套接字与套接模块 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了 ...
- Python学习之UDP版socket&SocketServer
7.6 基于UDP的socket 无连接的,不必与对方建立连接,而是直接把数据发送给对方: 适用于一次传输销量数据结构,可靠性不高的应用环境,因为其传输速率快 # 服务端 import socket ...
- 小菜学习Winform(三)Socket点对点通信
前言 Socket的英文原义是“孔”或“插座”,其实在网络编程中Socket就是这个意思,就像我们打电话,要首先知道对方的手机号一样,这个手机号就相当于一个Socket号.一个插座,在网络编程中就是i ...
- socketserver 分块记录
网络编程 Socket(TCP,IP)套接字 服务端 运行起来, 客户端 客户端 客户端 客户端 服务端: import socket sk = socket.socket() #绑定端口号 sk.b ...
随机推荐
- java_IO流(输出流)
** * io流: * 输入流:硬盘输入到内存 字节/字符输入流 * 输出流:内存输出到硬盘 字节/字符输入流 * 字节流:一切数据都是字节存储(二进制) * 字节输出流(OutputStream): ...
- 2019-8-31-dotnet-通过-WMI-获取系统启动的服务
title author date CreateTime categories dotnet 通过 WMI 获取系统启动的服务 lindexi 2019-08-31 16:55:59 +0800 20 ...
- MapReduce各个执行阶段
- LoadRunner函数的介绍
LoadRunner函数的介绍 LoadRunner函数 一:通用函数 LoadRunner的通用函数以lr为前缀,可以在任何协议中使用.可以如下分类: 信息相关的函数: lr_error_messa ...
- HDU - 6128
题意略: 题解:二次剩余板子题 //#pragma GCC optimize(2) //#pragma GCC optimize(3) //#pragma GCC optimize(4) //#pra ...
- 0908NOIP模拟测试赛后总结
%%%skyh rank1- 奶风神.kx.有钱人 rank2-210 NC锅.RNB.B哥 rank5-200 我 rank32- 9-13upd:无意中点进了某个博客发现我竟然考场上yy出了树上莫 ...
- Jeecg-Boot前后端分离,针对敏感数据,加密传递方案
# 针对敏感数据,加密传递方案 第一步: 在vue页面引入aesEncrypt.js encryption方法.示例代码: import { encryption } from '@/utils/en ...
- C语言实现 计算个人所得税务2种方法
#include <stdio.h> #include <stdlib.h> /* 基于C语言的个人所得税计税系统 问题描述: 我国现行的个人所得税计算方法如下: 级数 全月应 ...
- 01-python 学习第一天
今天是学习python语言的第一天,通过中国大学MOOC网的相关课程和其他在线教程,对python 语言有了初步的认识.今天我记住了<人生苦短,Python是岸>这句话.如果有人学习,建议 ...
- Python爬取b站任意up主所有视频弹幕
爬取b站弹幕并不困难.要得到up主所有视频弹幕,我们首先进入up主视频页面,即https://space.bilibili.com/id号/video这个页面.按F12打开开发者菜单,刷新一下,在ne ...