zoukankan      html  css  js  c++  java
  • 第二十六天作业

    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 后缀 . . . . . . . : 
    '''
    
    
  • 相关阅读:
    vue 点击出现下拉菜单,点击下拉菜单以外都要关闭菜单
    关于SET ANSI_PADDING的用法
    VUE中的/deep/用法
    VUE中的/deep/用法
    数字与字符串系列教材 (十)- 自己开发一个Java StringBuffer
    数字与字符串系列教材 (九)- Java StringBuffer常见方法
    数字与字符串系列教材 (八)- Java 比较字符串详解
    数字与字符串系列教材 (七)- Java常见字符串方法
    数字与字符串系列教材 (六)- Java中的字符串String详解
    数字与字符串系列教材 (六)- Java中的字符串String详解
  • 原文地址:https://www.cnblogs.com/lyyblog0715/p/11695723.html
Copyright © 2011-2022 走看看