第二十六天作业

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

在知道三次握手四次挥手之前

首先需要知道什么是双向通道,通道是信息传输的所需的通路,双向通道就是两条这样的通路,每条负责不同的事情,一条是客户端给服务端发送信息的,另一条是服务端给客户端法信息的。

其次,每次无论是客户端还是服务端发送信息时,另一端都要返回确认收到的信息

三次握手指的是建立连接

  1. 建立连接就是建立双向通道的过程。

  2. 第一次握手:客户端向服务端发送连接请求,这样就建立了客户端向服务端的一条单向的通道

  3. 第二次握手:服务端同时发送确认收到的信息和同意连接的信息,第二条通道建立

  4. 第三次握手:客户端向服务端确认收到信息

四次挥手指的是断开连接:

  1. 第一次挥手:客户端向服务端发送断开连接请求

  2. 第二次挥手:服务端向客户端发送确认收到信息

  3. 第三次挥手:当服务端在一段时间内接收不到客户端的信息后,它才会发送断开连接的信息

  4. 第四次挥手:客户端发送确认收到断开信息了,断开连接完成

2.基于TCP开发一款远程CMD程序
客户端连接服务器后,可以向服务器发送命令
服务器收到命令后执行,无论执行是否成功,无论执行几遍,都将执行结果返回给客户端
注意: 执行系统指令使用subprocess模块完成.

# 服务端
import socket
import subprocess

server = socket.socket()

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

server.listen(5)

# 监听是否有消息
while True:
    conn, addr = server.accept()
    print(addr)
    while True:
        try:
            data = conn.recv(1024).decode('gbk')
            if data == 'q':
                break
            res = subprocess.check_output(data)

            conn.send(res)

        except Exception as e:
            print(type(e))
            conn.send(str(e).encode('gbk'))

            print(e)
            continue
    conn.close()


# 客户端
import socket

client = socket.socket()

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

while True:
    send_msg = input('请输入命令:')
    client.send(send_msg.encode('gbk'))
    
    if send_msg == 'q':
        break
        
    data = client.recv(1024).decode('gbk')
    print(data)

client.close()


'''
客户端运行结果

请输入命令:dsaf
[WinError 2] 系统找不到指定的文件。
请输入命令:ipconfig

Windows IP 配置


无线局域网适配器 WLAN:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . : 

无线局域网适配器 本地连接* 9:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . : 

无线局域网适配器 本地连接* 10:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . : 
'''

原文地址:https://www.cnblogs.com/lyyblog0715/p/11695723.html