zoukankan      html  css  js  c++  java
  • day36---作业

    1、编写远程执行命令的C/S 软件架构

    client.py

    import socket
    
    IP_ADDRESS = ('182.92.59.34', 9090)
    BUF_SIZE = 1024
    
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect_ex(IP_ADDRESS)
    
    while 1:
        cmd = input('请输入远程命令:').strip()
        if not cmd: continue
        client.send(cmd.encode('utf-8'))
        result = client.recv(BUF_SIZE)
        print(result.decode('utf-8'))
        _continue = input('是否继续远程执行命令(y,n):').strip().lower()
        if _continue == 'n':
            break
    client.close()
    client端

    server.py

    import socket
    import subprocess
    
    IP_ADDRESS = ('0.0.0.0', 9090)
    BUF_SIZE = 1024
    
    # 创建服务端套接字
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(IP_ADDRESS)
    server.listen(5)
    
    while 1:
        conn, addr = server.accept()
        while 1:
            cmd = conn.recv(BUF_SIZE)
            if not cmd: break
            res = subprocess.Popen(cmd.decode('utf-8'), shell=True,
                                   stdout=subprocess.PIPE,
                                   stderr=subprocess.PIPE)
            conn.send(res.stdout.read())
        conn.close()
    server端

    执行效果

    [root@Surpass socket_project]# python remote_cmd_client.py 
    请输入远程命令:ls /home
    get-pip.py
    Python-3.8.0
    Python-3.8.0.tgz
    socket_project
    
    是否继续远程执行命令(y,n):y
    请输入远程命令:df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        909M     0  909M   0% /dev
    tmpfs           919M     0  919M   0% /dev/shm
    tmpfs           919M  576K  919M   1% /run
    tmpfs           919M     0  919M   0% /sys/fs/cgroup
    /dev/vda1        40G  2.6G   35G   7% /
    tmpfs           184M     0  184M   0% /run/user/0
    
    是否继续远程执行命令(y,n):n
    [root@Surpass socket_project]# 

    上述方法是借助

    res = subprocess.Popen(cmd.decode('utf-8'), shell=True,
                                   stdout=subprocess.PIPE,
                                   stderr=subprocess.PIPE)
    
    
    也可以使用os.popen来实现

    2、tcp3次握手,4次挥手状态图

    三次握手

    四次挥手

    (2)通信循环与链接循环的TCP通信代码

    客户端

    import socket
    
    BUF_SIZE = 1024
    IP_ADDRESS = ('182.92.59.34', 9090)
    
    tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_client.connect(IP_ADDRESS)
    
    while 1:
        msg = input('请输入消息:').strip()
        if not msg: continue
        tcp_client.send(msg.encode('utf-8'))
        back_msg = tcp_client.recv(BUF_SIZE)
        print(f"收到电话{back_msg.decode('utf-8')}")
    
    tcp_client.close()

    服务端

    import socket
    
    IP_ADDRESS = ('0.0.0.0', 9090)
    BUF_SIZE = 1024
    
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    tcp_server.bind(IP_ADDRESS)
    tcp_server.listen(5)
    
    while 1:
        conn,addr = tcp_server.accept()
        print(f'来自[{addr[0]}:{addr[1]}]的电话...')
        while 1:
            msg = conn.recv(BUF_SIZE)
            if not msg:break
            print(msg.decode('utf-8'))
            conn.send(msg.upper())
        coon.close()
  • 相关阅读:
    四则运算2
    四则运算1
    学习进度条
    Mat数据结构
    Markdown语法
    C++继承和派生
    C++智能指针
    clion配置ROS
    视觉十四讲:第六讲_g2o图优化
    视觉十四讲:第六讲_ceres非线性优化
  • 原文地址:https://www.cnblogs.com/surpass123/p/12738221.html
Copyright © 2011-2022 走看看