zoukankan      html  css  js  c++  java
  • 练习——网络编程

    一、三次握手和四次挥手

    • 三次握手
    1. 客户端和服务端都处于closed状态, 客户端主动打开连接,服务端被动打开连接
    2. 服务端创建传输控制块TCB,进入LISTEN(监听)状态
    3. 客户端创建传输控制块TCB,向服务端发送连接请求报文。
    4. 服务端收到请求报文后,如果同意连接,发出确认报文。
    5. 客户端收到确认后,向服务端发送确认,客户端进入ESTABLISHED(已建立连接)状态
    6. 服务器收到客户端的确认后也进入ESTABLISHED状态,双方可以开始通信。

    • 四次挥手
    1. 客户端和服务端都处于ESTABLISHED状态,客户端主动关闭,服务端被动关闭
    2. 客户端发送连接释放报文,并停止发送数据
    3. 服务器收到连接释放报文,发出确认报文,进入CLOSE-WAIT(关闭等待)状态。此时服务端发送数据,客户端仍然要接收。
    4. 客户端收到服务器的确认请求后,进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文
    5. 服务器发送完最后的数据,向客户端发送连接释放报文,进入LAST-ACK(最后确认)状态,等待客户端确认。
    6. 客户端接收到释放报文后发出确认,TCP连接释放后,进入CLOSED状态。
    7. 服务器收到确认,进入CLOSED状态

     二、基于TCP开发一款远程CMD程序

    #服务器
    import socket
    import subprocess
    server = socket.socket()
    server.bind(
        ('127.0.0.1',9000)
    )
    server.listen(5)
    
    while True:
        conn,addr = server.accept()
        print(addr)
        while True:
            try:
                data = conn.recv(1024).decode('utf-8')
                print(data)
                if len(data) == 0:
                    continue
                if data == 'q':
                    break
                obj = subprocess.Popen(
                    data,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE
                )
                msg = obj.stdout.read()
                error = obj.stderr.read()
                if msg:
                    print(msg.decode('gbk'))
                    conn.send(msg)
                else:
                    print(error.decode('gbk'))
                    conn.send(error)
            except Exception as e:
                print(e)
                break
        conn.close()
    #客户端
    import socket
    client = socket.socket()
    client.connect(
        ('127.0.0.1',9000)
    )
    
    while True:
        cmd = input('请输入命令').strip()
        client.send(cmd.encode('utf-8'))
        if cmd == 'q':
            break
        data = client.recv(1024).decode('gbk')
        print(data)
  • 相关阅读:
    css3360度旋转动画
    PAT 1084 外观数列(20)(代码+思路+推荐测试用例)
    PAT 1083 是否存在相等的差(20)(代码+思路)
    PAT 1082 射击比赛(20)(代码+思路)
    PAT 1079 延迟的回文数(代码+思路)
    PAT 1078 字符串压缩与解压(20)(代码+思路)
    PAT 1077 互评成绩计算(20)(代码+思路)
    PAT 1073 多选题常见计分法(20)(代码+思路)
    PAT 1072 开学寄语(20)(代码+思路)
    PAT 1069 微博转发抽奖(20)(代码+思路+测试点4)
  • 原文地址:https://www.cnblogs.com/binyuanxiang/p/11695740.html
Copyright © 2011-2022 走看看