码迷,mamicode.com
首页 > 其他好文 > 详细

练习——网络编程

时间:2019-10-17 23:18:31      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:imp   color   strip()   技术   exce   pre   div   listen   out   

一、三次握手和四次挥手

  • 三次握手
  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)

 

练习——网络编程

标签:imp   color   strip()   技术   exce   pre   div   listen   out   

原文地址:https://www.cnblogs.com/binyuanxiang/p/11695740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!