python send 案例_Python 之 SSH实例(可接受大字节返回)

本文介绍了一个使用 Python 的 socket 模块实现的简单远程命令执行服务端和客户端程序。服务端监听本地端口接收来自客户端的命令,并在本地执行后将结果返回给客户端。该示例展示了如何通过 socket 进行双向通信并处理一些基本的网络编程问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#Author Kang

import os

import subprocess

import socket

server = socket.socket()

server.bind((‘localhost‘,9999))

server.listen()

print("等待客户端连接:>>>>")

while True:

conn,addr = server.accept()

print("接受了一个新的链接!!")

while True:

data = conn.recv(1024)

cmd = subprocess.getstatusoutput(data.decode())

print("执行命令:>>",cmd)

res_size = str(len(cmd[1].encode("utf-8")))

print(res_size)

if len(cmd[1]) != 0:

conn.send(res_size.encode("utf-8"))

ack = conn.recv(1024) #解决SOCKET粘包的问题,即发送命令结果大小与命令结果同时发送

conn.send(cmd[1].encode("utf-8"))

elif cmd[0] == 0 and len(cmd[1]) == 0:

res = ‘命令执行成功,但没有返回值‘

conn.send(res_size.encode("utf-8"))

ack = conn.recv(1024) # 解决SOCKET粘包的问题

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

if len(data) == 0:

break

server.close()

客户端代码

#Author Kang

import socket

client = socket.socket()

client.connect((‘localhost‘,9999))

while True:

msg = input("请输入你要传递的信息:>>>>>")

if len(msg) == 0:

continue

client.send(msg.encode("utf-8")) #发送命令给服务器端

cmd_size = client.recv(1024) #接受服务器返回结果的长度

print("接受结果的大小为:",cmd_size.decode())

recv_size = 0

res_data = ""

client.send("我已经可以可以接受了".encode("utf-8")) #为了解决粘包的问题,返回我已经接送命令返回的大小,开始接受结果

while recv_size < int(cmd_size): #判断当前接受的大小与服务器执行命令大小,如小于继续接受

data = client.recv(1024)

recv_size += len(data)

res_data += data.decode()

else:

print(res_data)

client.close()

原文:https://blog.51cto.com/12965094/2357768

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值