小白练习笔记
import socket
import os
server = socket.socket() #实例化
server.bind(('localhost',9999)) #绑定ip及端口
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.encode('utf-8')))
if len(cmd_res) == 0: #防止无返回信息,客户端卡死
cmd_res = 'cmd has no output....'
conn.send(str(len(cmd_res.encode('utf-8'))).encode('utf-8')) #通知客户端返回信息长度,注意编码,汉字占3字节,如果不编码将导致字节数不一致
client_ack = conn.recv(1024) #socket服务两次发送数据之间如果没有间隔,有可能在缓冲区合并为一条发送。这将导致客户端报错,在两次之间加一次接收确认,将socket粘包有效分割开
conn.send(cmd_res.encode('utf-8')) #发送信息,将信息转换成字节码
print('send done')
server.close()