今日内容

  1、基于TCP协议(通信循环)

  2、基于TCP协议(连接循环)

  3、粘包问题

  4、模拟SSH实现远程执行命令

服务器端

###############################################################################################

from socket import *
import json
import struct Sever = socket(AF_INET, SOCK_STREAM)
IP = '192.168.13.131'
PORT = 8084
Sever.bind((IP, PORT)) Sever.listen(5)
while True: #这里说明了循环链接问题的实现方式,在Sver.accept()上面加一个循环可以使得在客户端断开连接后,服务器再次回到这里继续处于阻塞状态,等待下一个客户端请求连接
conn, address = Sever.accept()
while True:#这里说明了通信循环问题的实现方式,在data = conn.recv(1024)上面这样服务器可以循环的接收客户端的消息,客户端也是要做相同的循环
try:
data = conn.recv(1024)
num = data.decode('utf-8')[0]
if num == '1':
print('从客户端接收到的数据:', data.decode('utf-8'))
         #解决粘包问题,在数据前面添加一个报头
with open(r'%s' % data[1::].decode('utf-8'), mode='rb') as f:
msg = b''
for i in f.readlines():
msg += i
file_size = len(msg)
header_dic = {
'file_name': 'aaa',
'file_number': '123456',
'file_size': file_size
}
header_json = json.dumps(header_dic)
header = struct.pack('i', len(header_json))
conn.send(header)
conn.send(header_json.encode('utf-8'))
conn.send(msg)
elif num =='2':
header = conn.recv(4)
header_size = struct.unpack('i', header)[0]
header_json = conn.recv(header_size)
header_dic = json.loads(header_json)
total_size = header_dic['file_size']
print(header_dic)
file_msg = b''
recv_size = 0
with open(r'E:\code\GoodDog\day32\文件上传下载之终极版本\服务器端接收', 'wb') as f:
while recv_size < total_size:
data = conn.recv(1024)
recv_size += len(data)
file_msg += data
f.write(data)
except ConnectionResetError:
break
conn.close()

################################################################################################

客户端

#####################################################################################################

from socket import *
import json
import struct PC = socket(AF_INET,SOCK_STREAM)
IP='192.168.13.131'
PORT = 8084
PC.connect((IP,PORT)) while True:
msg = input('文件地址:').strip()
if len(msg) == 0:continue
PC.send(msg.encode('utf-8'))
if msg[0] == '1':
header = PC.recv(4)
header_size = struct.unpack('i', header)[0]
header_json = PC.recv(header_size)
header_dic = json.loads(header_json)
total_size = header_dic['file_size']
print(header_dic)
file_msg = b''
recv_size = 0
with open(r'E:\code\GoodDog\day32\文件上传下载之终极版本\客户端接收.txt', 'wb') as f:
while recv_size < total_size:
data = PC.recv(1024)
recv_size+=len(data)
file_msg+=data
f.write(data)
elif msg[0] == '2':
with open(r'E:\code\GoodDog\day32\文件上传下载之终极版本\客户端接收.txt', mode='rb') as f:
msg = b''
for i in f.readlines():
msg += i
file_size = len(msg)
print(file_size)
header_dic = {
'file_name': 'aaa',
'file_number': '123456',
'file_size': file_size
}
header_json = json.dumps(header_dic)
header = struct.pack('i', len(header_json))
PC.send(header)
PC.send(header_json.encode('utf-8'))
PC.send(msg)
print(msg)

#####################################################################################################

模拟SSH实现远程执行命令

服务器

#######################33##############################################################################

import socket
import subprocess
import struct
Sever = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip = '127.0.0.7'
port = 3312
Sever.bind((ip,port)) Sever.listen(2)
while True:
conn,address = Sever.accept()
while True:
try:
msg = conn.recv(1024)
obj = subprocess.Popen(r'%s'%msg.decode('utf-8'), shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
stdout = obj.stdout.read()
stderr = obj.stderr.read()
header = struct.pack('i', len(stdout) + len(stderr))
conn.send(header)
conn.send(stdout)
conn.send(stderr)
except ConnectionResetError:
break
conn.close() Sever.close()

#######################################################################################################

客户端

################################################################################################################

import socket
import struct
PC= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip = '127.0.0.7'
port = 3312
PC.connect((ip,port))
while True:
m = input('请输入:').strip()
PC.send(m.encode('utf-8'))
header = PC.recv(4)
total_size = struct.unpack('i',header)[0]
cmd_res = b''
recv_size = 0
while recv_size < total_size:
date = PC.recv(1024)
recv_size+=len(date)
cmd_res+=date
print(cmd_res.decode('gbk'))

################################################################################################################

day32的更多相关文章

  1. Spark Streaming揭秘 Day32 WAL框架及实现

    Spark Streaming揭秘 Day32 WAL框架及实现 今天会聚焦于SparkStreaming中非常重要的数据安全机制WAL(预写日志). 设计要点 从本质点说,WAL框架是一个存储系统, ...

  2. day32 进程

    上午: # 1 开启子进程 #target #args # if __name__ == '__main__' #start() # 2.其它的方法: #方法: #terminate() #is_al ...

  3. day32——进程、操作系统

    day32 进程的基础 程序 一堆静态的代码文件 进程 一个正在运行的程序进程.抽象的概念 被谁运行? 由操作系统操控调用交于CPU运行 ​ 操作系统 管理控制协调计算机中硬件与软件的关系 操作系统的 ...

  4. day32 HTML

    day32 HTML 什么是前端 只要是跟用户打交道的界面都可以称之为前端 # eg:电脑界面, 手机界面,平板界面, 什么是后端? eg:python, java,php,go, 不跟用户直接打交道 ...

  5. javascript DOM,它到底是什么-------Day32

    这一晚上看的我是头疼不已啊,为什么呢? 终究是半路出家,我对javascript的理解仅仅停留在:调用javascript,改变页面样式,元素和实现一些事件的响应,尽管须要的时候可能会用,可是到底使用 ...

  6. Python全栈之路-Day32

    1 类的__slots__ #!/usr/bin/env python # __Author__: "wanyongzhen" # Date: 2017/4/25 # 只能定义__ ...

  7. Day3-2 函数之递归

    递归 定义:一个函数在 内部调用自己,就称为递归. # 如何让10不停的除以2,直到不能除为止. n = 10 while True: n = int(n /2) print(n) if n == 0 ...

  8. day32 process模块用法

    昨日作业: 服务端: 服务端: from socket import * from multiprocessing import Process def server(ip,port): server ...

  9. day32基于tcp协议的远程执行命令

    客户端 from socket import *import structimport json client = socket(AF_INET, SOCK_STREAM)client.connect ...

随机推荐

  1. 排序算法(5)--Selection Sorting--选择排序[2]--Heap Sort--堆排序

    1.基本思想 具有n个元素的序列 (h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1) (i=1,2,...,n ...

  2. js-redux学习笔记

    1.action creator 就是函数,负责构建一个 action (是的,action creator 这个名字已经很明显了)并返回它. var actionCreator = function ...

  3. Android ConstraintLayout详解(from jianshu)

    Android ConstraintLayout详解 https://www.jianshu.com/p/a8b49ff64cd3 1. 概述     在本篇文章中,你会学习到有关Constraint ...

  4. AWS CSAA -- 04 AWS Object Storage and CDN - S3 Glacier and CloudFront(一)

    013 S3 - 101 014 Create an S3 Bucket - Lab

  5. pages bookmarks for machine learning domain

    http://www.ai-start.com/dl2017/html/lesson4-week2.html  达叔深度学习笔记 http://cs231n.github.io/convolution ...

  6. Android开发中使用七牛云存储进行图片上传下载

    Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...

  7. 配置nginx支持TP框架

    TP框架配置中默认URL_MODEL=1,而Nginx默认是不支持PATHINFO的.如果我们只想跑起来tp框架,很简单,只需到更改TP配置,设置URL_MODEL=3(兼容模式).但是如果要让Ngi ...

  8. elasticsearch之JAVA环境变量报错:could not find java; set JAVA_HOME or ensure java is in PATH

    在以RPM包安装elasticsearch过程中出现报错JAVA环境的问题: ● elasticsearch.service - Elasticsearch Loaded: loaded (/usr/ ...

  9. 打开word文档时提示“Microsoft Office Word已停止工作”

    我的电脑(Win10)有Office 2003和2013两个版本,可能由于之前超长待机等原因导致word 2003的文件(.doc)不能正常打开,没次都会提示“Microsoft Office Wor ...

  10. 5.Solr4.10.3中配置中文分词器

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.下载IK Analyzer 2012FF_hf1.zip并上传到/home/test 2.按照如下命令安装 ...