Day 26 作业

作业

1.整理TCP三次握手、四次挥手图

三次握手:

起初A和B都处于CLOSED状态——B创建TCB,处于LISTEN状态,等待A请求——A创建TCB,发送连接请求(SYN=1,seq=x),进入SYN-SENT状态——B收到连接请求,向A发送确认(SYN=ACK=1,确认号ack=x+1,初始序号seq=y),进入SYN-RCVD状态——A收到B的确认后,给B发出确认(ACK=1,ack=y+1,seq=x+1),A进入ESTABLISHED状态——B收到A的确认后,进入ESTABLISHED状态

四次挥手:

A、B连接建立状态ESTABLISHED——A终止等待1状态FIN-WAIT-1——B关闭等待状态CLOSE-WAIT——A终止等待2状态FIN-WAIT-2——B最后确认状态LAST-ACK——A时间等待状态TIME-WAIT——B、A关闭状态CLOSED

2.基于TCP开发一款远程CMD程序

客户端连接服务器后,可以向服务器发送命令

服务器收到命令后执行,无论执行是否成功,无论执行几遍,都将执行结果返回给客户端

注意: 执行系统指令使用subprocess模块完成.

# 服务端
import socket
import subprocess

server = socket.socket()

server.bind(
    ('127.0.0.1', 8080)
)

server.listen(3)

conn, addr = server.accept()
print(addr)

while True:
    try:
        cmd = conn.recv(1024).decode('utf8')
        res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
        result = res.stdout.read()

        if cmd == 'q':
            break

        conn.send(result)

    except Exception as e:
        break

conn.close()
server.close()
# 客户端
import subprocess
import socket


client = socket.socket()

client.connect(
    ('127.0.0.1', 8080)
)

while True:
    cmd = input('>>> ')
    client.send(cmd.encode('gbk'))

    if cmd == 'q':
        break

    client.recv(1024)

client.close()

猜你喜欢

转载自www.cnblogs.com/2222bai/p/11693807.html