python 语言TCP实践之ssh

工作过程:


'''
服务器步骤:
实例化
绑定
等待连接(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'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值