工作过程:
'''
服务器步骤:
实例化
绑定
等待连接(listen)
死循环
阻塞 accept
接收数据
从cmd进行操作
将cmd返回的内容发给客户端,先发大小,再发内容
'''
import socket
import os
import time
server = socket.socket()
server.bind(('localhost',9999))
server.listen()
while True:
conn,addr = server.accept()
print('地址是',addr)
while True:
data = conn.recv(1024)
if not data:
print('服务器断开')
break
#else:
cmd = data.decode('utf-8')
cmdInfor = os.popen(cmd).read()
#sendSize = len(cmdInfor.encode('utf-8'))
#此处不应该进行替换 因为下文发送的个数不应该是0,而应该是‘there is no data’的长度,发送的内容也是这个
#print('发送字节数为:',sendSize)
#print(cmdInfor)
if len(cmdInfor.encode('utf-8')) == 0:
cmdInfor = 'there is no data'
#server.send(sendData.encode('utf-8'))
#else:
#print(len(sendData.encode('utf-8')))
#
conn.send(str(len(cmdInfor.encode('utf-8'))).encode('utf-8')) #应该是conn而不是server 切记切记
time.sleep(0.5)
conn.send(cmdInfor.encode('utf-8'))
工作过程:
'''
实例化
连接
死循环等待
发
收
收分两步:
第一步收总共要收的字节
第二步要收所以的字节
因为收的时候可能收不齐,需要根据字节数多收几次
'''
import socket
client = socket.socket()
client.connect(('localhost',9999))
while True:
sendCont = input('>>:').strip()
if len(sendCont) == 0:
continue
client.send(sendCont.encode('utf-8'))
recvCont = client.recv(1024)
#print(recvCont.decode('utf-8'))
print('收到的内容1',recvCont)
print(recvCont.decode())
recvCont_int = int(recvCont.decode('utf-8'))
print(type(recvCont_int))
#print(int(recvCont.decode()))
#recvSizeSum = int(recvCont.decode('utf-8'))
#print('收到的字节数是:',recvSizeSum)
recvSize = 0
recvDataAll = b''
while recvSize < int(recvCont.decode('utf-8')):
#print('lcy')
recvData = client.recv(1024)
recvSize += len(recvData)
recvDataAll += recvData
#print('111')
else:
print(recvDataAll.decode('utf-8'))