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()
原文地址:https://www.cnblogs.com/surpass123/p/12738221.html