|
server端: import socket,os
server = socket.socket()
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('utf-8'))
#发送数据长度给client,这样client就可以判断(根据1024)需要接收多少次数据。
#但是这里要注意的是,整数是不可以被encode,只有字符串才可以被encode,所以这里要使用str将其改为字符串格式
conn.send(cmd_res.encode('gbk')) #发送实际数据给client,注意实际数据是从Windows获取的,所以数据格式是gbk
print ("send done")
server.close()
client端:
import socket
client = socket.socket()
client.connect(('localhost',9999))
while True:
cmd = input(">>:").strip()
if len(cmd) == 0:continue
client.send(cmd.encode('utf-8'))
cmd_res_size = client.recv(1024) #接收命令结果的长度
# cmd_res = client.recv(1024)
print ('接收结果大小:',cmd_res_size.decode()) #打印接收数据的总大小
received_size = 0
while received_size != int(cmd_res_size.decode()):
#接收来的数据大小不等于数据的总大小,说明数据还没接收完,就会一直循环接收数据;
#由于cmd_res_size发送过来的是bytes类型,所以需要先decode,在int将字符串改为整数。
data = client.recv(1024)
received_size += len(data) #每次接收数据可能小于1024,所以需要len判断
print (data.decode('gbk')) #发送过来的Windows数据是gbk
else:
print ("cmd res receive done....",received_size)
client.close()
client执行结果:
>>:ipconfig
接收结果大小: 1185
Windows IP 配置
无线局域网适配器 WLAN:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
无线局域网适配器 本地连接* 1:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::141a:83:bbf0:3c7%2
IPv4 地址 . . . . . . . . . . . . : 10.213.36.2
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 10.213.36.250
以太网适配器 VMware Network Adapter VMnet1:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::e08f:e633:7d98:5a39%20
IPv4 地址 . . . . . . . . . . . . : 192.168.52.1
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
以太网适配器 VMware Network Adapter VMnet8:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::318f:38e3:25d9:c249%11
IPv4 地址 . . . . . .
. . . . . . : 192.168.142.1
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
以太网适配器 蓝牙网络连接:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
隧道适配器 本地连接* 12:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
server执行结果:
new conn: ('127.0.0.1', 60035)
等待新指令
执行指令: b'ipconfig'
before send 1185
send done
等待新指令 |
|
|