zoukankan      html  css  js  c++  java
  • 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发出连接释放报文段并处于FIN-WAIT-1状态——B发出确认报文段且进入CLOSE-WAIT状态——A收到确认后,进入FIN-WAIT-2状态,等待B的连接释放报文段——B没有要向A发出的数据,B发出连接释放报文段且进入LAST-ACK状态——A发出确认报文段且进入TIME-WAIT状态——B收到确认报文段后进入CLOSED状态——A经过等待计时器时间2MSL后,进入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()
    
  • 相关阅读:
    WebSocket属性的简介及使用
    JAVA_基础逻辑运算符与位运算符使用
    JAVA_基础数据类型介绍与基本数据类型之间的运算规则
    ES6特性整理
    Vue-cli中的安装方法
    Kubernetes核心原理(一)之API Server
    Kubernetes核心原理(四)之Kubelet
    kubernetes-整体概述和架构详解
    Kubernetes dashboard认证访问
    kubeadm HA master(v1.14.0)离线包 + 自动化脚本 + 常用插件 For Centos/Fedora
  • 原文地址:https://www.cnblogs.com/2222bai/p/11693807.html
Copyright © 2011-2022 走看看