練習_ネットワークプログラミングの基礎

  • スリーウェイハンドシェイクのビルド接続:
    良好な接続を確立し、双方向チャネルを確立します。
    スリーウェイハンドシェイク:
    最初のハンドシェイクが:接続が確立され、クライアントはサーバーにSYNパケットを送信し、SYN_SENT状態に入る、サーバが確認するのを待つ
    秒ハンドシェイクを:サーバーは、シンパケットを受信し、SYNパケットを送信している間、顧客のSYNを確認しますすなわちSYN + ACKパケットは、サーバが状態SYN_RECVに入り、
    第三のハンドシェーク:クライアントがサーバにSYN + ACKパケットを受信し、サーバは受信確認パケットACK(ACK = Y + 1)を送信し 、 このパケットの送信が完了すると、クライアントクライアントとサーバーESTABLISHED(TCP接続が成功した)状態に、3ウェイハンドシェイクを完了します。

  • 接続破り四波:
    最初のクライアントがサーバにFIN要求を送信し、データの送信を停止します。クライアントは、FIN-WAIT-1(1つの終端待ち)状態になります。
    第二に、サーバは、要求、ACK確認、CLOSE-WAITにサーバ(オフ待機)状態を受信します。
    クライアントが、その場合には、確認サーバを受信した後に待機は、クライアントが入る(最後のデータは、サーバによって送信されることが同意する必要があります)サーバーが要求FIN FIN-WAIT-2を送信するために待っている、(2終了待ち)状態。
    三回目の後、サーバーは、サーバーは、クライアントの承認を待って、LAST-ACK(確認応答の最後の)状態になり、最後のデータがFINを送信するために、クライアントが要求を完了し送信します。
    第四に、クライアントは、クライアントは、TIME-WAIT(待機)状態になり、サーバーが送信FIN、ACK応答を受け取る要求します。(注:この時点ではTCP接続が解放されていない、クライアントは、対応するTCBを取り消すのみ限り、サーバーがクライアントから送信された確認を受けたとして、CLOSED状態に入るとき、(2MSLを通じて最大セグメント寿命)時間をかけてきました今CLOSED状態に入る。同様に、TCBの失効後、TCP接続を介して、以前、クライアントよりもサーバーのTCPコネクションの終了時刻を見ることができます。)

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

server 端代码:
import socket
import subprocess

server = socket.socket()

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

server.listen(5)

while True:
    conn, addr = server.accept()

    while True:
        try:
            cmd = conn.recv(1024).decode('utf8')
            print(f'接收到命令:{cmd}')

            if cmd == 'q':
                break

            res = subprocess.check_call([cmd])

            if str(res) == '0':
                msg = '命令执行成功!'

            else:
                msg = f'命令执行失败!{str(res)}'

            send_msg = conn.send(msg.encode('utf8'))

        except Exception as e:
            print(e)

            send_msg = conn.send(str(e).encode('utf8'))

            continue

    conn.close()
client 端代码

import socket

client = socket.socket()

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

while True:
    send_msg = input('给服务器发送命令:')

    client.send(send_msg.encode('utf8'))

    if send_msg == 'q':
        break

    data = client.recv(1024).decode('utf8')
    print(f'服务器返回信息:{data}')

client.close()

注意:用以上两段代码模拟客户端和服务器,代码要在两个命令框执行(python解释器不行),并且要先执行server,只有server开始监听了,client才能连接。

おすすめ

転載: www.cnblogs.com/allenchen168/p/11695606.html