zoukankan      html  css  js  c++  java
  • 一个简单的socket SSH

    服务端:

    # Author:Winter Liu is coming!
    import socket
    import os
    
    server = socket.socket()
    server.bind(("localhost", 9999))
    
    server.listen()
    while True:
        conn, addr = server.accept()
        print("新连接建立", addr)
        while True:
            print("等待命令!")
            data = conn.recv(1024)  # buffer大小,建议最大8K,返回编码数据
            if not data:
                print(addr, "客户端断开!")
                break
            print("执行指令:", data.decode())  # 注意解码
            cmd_res = os.popen(data.decode()).read()  # 调用命令
            print(len(cmd_res))
            if len(cmd_res) == 0:         # 判断命令是否被执行
                cmd_res = "输入错误"
    
            # 先发送执行结果字符串的长度
            # 注意len返回中文长度会和实际不一致
            # 注意粘包问题
            conn.send(str(len(cmd_res)).encode("UTF-8"))
            print(conn.recv(1024).decode())
            conn.send(cmd_res.encode("UTF-8"))
            cmd_res = ""
    
    
    server.close()

    客户端:

    # Author:Winter Liu is coming!
    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_len = client.recv(1024).decode()  # 获取待发送数据长度
        client.send("准备接收数据:".encode())
        cmd_res_len = int(cmd_res_len)  # 注意转换为整数
    
        recv_data = ""
        recv_size = 0
    
        while recv_size < cmd_res_len:  # 判断是否接受完成
            data = client.recv(1024)
            recv_size += len(data)
            print(recv_size, len(data))
            recv_data += data.decode()
        else:
            print("执行完毕!")
    
        print(recv_data)
        print(len(recv_data))
    
    client.close()
  • 相关阅读:
    JSONP的学习(收集整理)
    10个必备的移动UI设计资源站(转)
    iscroll4框架解析[webapp开发](转)
    IE9中Media queries在iframe无效的解决方法
    mustache模板技术
    企业级的响应式设计(Responsive design at enterprise level)译
    在JSP中使用jQuery的冲突解决(收集整理)
    Java开发 Eclipse使用技巧(转)
    Front End中Javascript兼容问题收集(转)
    vector it->和*it
  • 原文地址:https://www.cnblogs.com/nmucomputer/p/12663283.html
Copyright © 2011-2022 走看看