zoukankan      html  css  js  c++  java
  • socket练习--ssh

    服务器端:

    # -*-coding:utf-8-*-
    # Author:sunhao
    
    import socket
    import os
    
    server = socket.socket()
    
    ip_port = ('127.0.0.1',6969)
    
    server.bind(ip_port)
    
    server.listen()
    
    while True:
    
        conn,f = server.accept()
        print("new connect:",f)
    
        while True:
            print("等待新指令")
    
            data = conn.recv(1024)
            if not data:
                print("客户端断开")
    
                break
            print("执行指令",data)
    
            res = os.popen(data.decode()).read()
    
    
            print("before send",len(res.encode()))
    
    
    
            if len(res) == 0:
                res = "cmd has bo output"
    
            conn.send(str(len(res.encode())).encode('utf-8'))   #先发数据大小给客户端    会发生粘包
    
            client_ack=conn.recv(1024)         #解决粘包
    
            conn.send(res.encode("utf-8"))
    
            print("send done")
    
    
    
    
    
    
    server.close()

      

     客户端:

    # -*-coding:utf-8-*-
    # Author:sunhao
    
    
    import socket
    
    
    client = socket.socket()
    ip_port = ('127.0.0.1',6969)
    
    client.connect(ip_port)
    
    print("连接开始")
    while True:
    
        command = input(">>>:").strip()
    
        if len(command) == 0:
            continue
    
        client.send(command.encode("utf-8"))
    
        cmd_res_size=client.recv(1024)  #接受命令结果的长度
    
        print("命令结果的大小",cmd_res_size)
    
        client.send("准备好接收了".encode('utf-8'))   #解决粘包
    
        recived_size=0
        recived_data=b''
    
        while recived_size < int(cmd_res_size.decode()):
    
            print("----------",cmd_res_size.decode())
            print("##############", type(cmd_res_size.decode()))
    
            data=client.recv(1024)
    
            print("&&&&&&&&&&",len(data))
    
            recived_size += len(data)  #每次收到的有可能小于1024 所以用len判断
            recived_data += data
    
    
    
        else:
    
            print("cmd recive done",recived_size)
    
            print(recived_data.decode())
    
    
    
    
    client.close()
  • 相关阅读:
    单例模式
    dubbo环境搭建
    树莓派Zero W无键盘无屏幕初始化
    Arduino连接MPU6050陀螺仪
    Raspberry Pi3驱动Oled ssh1106屏
    SonarQube 7.7默认数据库连接方法
    解决SonarQube启动时直接挂掉问题
    解决sonar的ES无法启动问题
    Jenkins自动打包并部署(以java -jar形势运行)
    python3中OpenCV imwrite保存中文路径文件
  • 原文地址:https://www.cnblogs.com/sunhao96/p/7793673.html
Copyright © 2011-2022 走看看