使用网上socket代码实现ssh功能,如下:

server.py

#服务端Linux系统下:处理命令并返回

import socket

import os

#声明类型,生成socket链接对象

server = socket.socket()

#监听接收端口元组(本地,端口),绑定要监听的端口

server.bind(('localhost',6969))

#最大监听数,允许多少人在排队

server.listen(5)

while True: #循环锁定访问客户端

print("等待执行指令")

conn,addr = server.accept() #返回链接的标记位conn,与连接的地址

print(conn, addr) #客户端同过conn,addr进行通话,conn就是客户端连接过来而在服务器端为其生成的一个连接实例

while True: #循环处理客户端请求

print(conn)

data = conn.recv(1024) #1.接收数据,默认1024字节,缓冲区每次最多发32768,每个系统不同,超出数值会有限制。字节如果发不完会存在缓冲去,下次在发送

print('输入命令为:',data.decode('utf-8'))

#Linux系统内可以判断是否为空。

if not data:

print('断开链接')

break

#执行命令,赋值给变量

res = os.popen(data.decode('utf-8')).read()

print('服务段执行命令后得到数据的size:',len(res))

if len(res)==0:

res='输入命令有误,请重新输入'

# 返回res的总长度

conn.send(str(len(res)).encode('utf-8')) #len(str)为整数,需要变成字符格式才能使用encode方法

#返回res详细结果

conn.send(res.encode('utf-8'))

#sendll就是循环send,用法发送大型文件。

#conn.sendll(res)

continue

#关闭链接

server.close()

client.py

#客户端Linux系统下:输入命令通过服务端返回

import socket

#声明协议类型,同事生成socket连接对象

client = socket.socket()

#链接地址和端口,元组(本地,端口)

client.connect(('localhost',6969))

#使用input循环向服务端发送请求

while True:

cmd = input(">>:").strip()

if len(cmd) == 0:

continue

#发送数据 b将字符串转为bys类型

client.send(cmd.encode("utf-8")) #send只能发送bytes格式数据

#接收服务器端的返回(长度和详细内容),需要声明收多少,默认1024字节

cmd_res_size = client.recv(1024)

print(type(int(cmd_res_size.decode('utf-8'))))

print('客户端收到执行后的命令长度:',cmd_res_size.decode('utf-8'))

received_size =0

received_data = b''

while received_size < int(cmd_res_size.decode('utf-8')):

cmd_res = client.recv(1024)

received_size += len(cmd_res)

received_data += cmd_res

else:

print('接收完成')

#打印data是recv的data

#print("recv_len:",cmd_res_len.decode('utf-8'))

print("recv:",received_data.decode('utf-8'))

#关闭接口

client.close()

上述代码主要功能实现client端输入Linux命令,传送到server端执行并将命令执行结果返回client端,但有时候因为server.py中

# 返回res的总长度

conn.send(str(len(res)).encode('utf-8')) #len(str)为整数,需要变成字符格式才能使用encode方法

#返回res详细结果

conn.send(res.encode('utf-8'))

连续发送数据,出现粘包,导致在client.py 中处理

cmd_res_size = client.recv(1024)

print(type(int(cmd_res_size.decode('utf-8'))))

取到cmd_res_size不为整数,导致int(cmd_res_size.decode('utf-8'))语句报错

修改socket粘包问题方法如下:

1、添加time.sleep(0.2)

# 返回res的总长度

conn.send(str(len(res)).encode('utf-8')) #len(str)为整数,需要变成字符格式才能使用encode方法

time.sleep(0.2)

#返回res详细结果

conn.send(res.encode('utf-8'))

2、在server和client之间添加个一个交互

python socket send_python socket 连续send,出现粘包问题相关推荐

  1. python socket实现文件传输(防粘包)

    1.文件传输的要点: 采用iterator(迭代器对象)迭代读取,提高读取以及存取效率: 通过for line in file_handles逐行conn.send(): 2.socket粘包问题: ...

  2. 文件传输_python socket实现文件传输(防粘包)

    1.文件传输的要点: 采用iterator(迭代器对象)迭代读取,提高读取以及存取效率: 通过for line in file_handles逐行conn.send(): 2.socket粘包问题: ...

  3. Python3之socket编程(TCP/UDP,粘包问题,数据传输、文件上传)

    一.socket的定义 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后 ...

  4. python socket send_Python socket.send方法代码示例

    本文整理汇总了Python中socket.send方法的典型用法代码示例.如果您正苦于以下问题:Python socket.send方法的具体用法?Python socket.send怎么用?Pyth ...

  5. pythontcp文件传输_python socket实现文件传输(防粘包)

    1.文件传输的要点: 采用iterator(迭代器对象)迭代读取,提高读取以及存取效率: 通过for line in file_handles逐行conn.send(): 2.socket粘包问题: ...

  6. Socket 套接字和解决粘包问题

    ---恢复内容开始--- Socket 套接字: 什么是socket: Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实 就是一个门面模式,它 ...

  7. 并发编程知识总结,软件开发架构,socket套接字模板,粘包问题,struct解决粘包问题,上传大文件数据,socketserver,关于操作系统的发展史,进程,线程。...

    并发编程知识总结 软件开发架构 C/S: client:客户端 server:服务端 优点:占用网络资源少,软件的使用稳定 缺点:服务端更新后,客户端也要更新,需要使用多个软件,需要下载多个客户端 B ...

  8. Socket编程(4)TCP粘包问题及解决方案

    ① TCP是个流协议,它存在粘包问题 TCP是一个基于字节流的传输服务,"流"意味着TCP所传输的数据是没有边界的.这不同于UDP提供基于消息的传输服务,其传输的数据是有边界的.T ...

  9. Python网络与并发编程 02 TCP粘包

    TCP/Socket与subprocess 我们准备做一个可以在Client端远程执行Server端的shell命令并拿到其执行结果的程序,而涉及到网络通信就必然会使用到socket模块,此外还需要s ...

最新文章

  1. Font Awesome一套绝佳的图标字体库和CSS框架的使用
  2. 解密所有APP运行过程中的内部逻辑
  3. python random函数sample_Python random.seed() random.sample()函数使用
  4. 迈入现代 Web 开发(GMTC 2021 演讲全文)
  5. 源于十年来的点滴积累——《变革中的思索》印行出版
  6. 工业机器人的控制方式
  7. Kafka 集群数据备份 MirrorMaker 详解
  8. php hmacsha1计算,PHP HMAC_SHA1 算法 生成算法签名
  9. 计算机专业外语英译汉,信科计算机专业英语英译汉
  10. 试用VisualStudio2005Beta2出现的小BUG
  11. 随想录(c编译器的实现)
  12. 阿里云部署flask
  13. Python密码存储器
  14. [翻译] MSAlertController
  15. Linux C++线程池框架
  16. 【LTE】Qualcomm LTE Packets log 分析(二)LTE Access Stratum Log Analysis 3_SRB1 4_UL_DATA_Tran
  17. mmorpg服务器物理,伸缩性MMORPG服务器架构的设计与实现
  18. 服务器电源线的分类及应用
  19. xHiveAI-A311D:AI开发套件
  20. template不支持v-show

热门文章

  1. Spring Data JPA框架
  2. 5、Flutter 实现 ViewPager、bottomNavigationBar 界面切换
  3. Android 实现指纹识别demo
  4. hibernate基于单表curd
  5. (JAVA)Math类
  6. c语言 feof_C语言 技能提升 系列文章(六)文件操作
  7. Web前端书单从HTML到JS到AJAX到HTTP从框架到全栈
  8. Linux 内核编码风格【转】
  9. python学习第19天
  10. MySQL数据导入导出(一)