ソケットとUDPネットワーク通信の継続

リモートコマンドの実行例:

輸入ソケット
輸入サブプロセス

電話= socket.socket(はsocket.AF_INET、socket.SOCK_STREAM)

phone.bind(( '127.0.0.1'、8080))

phone.listen(5)

しばらく1:#ループ接続クライアント
コネティカット、CLIENT_ADDR = phone.accept()
印刷(CLIENT_ADDR)

while 1:
    try:
        cmd = conn.recv(1024)
        ret = subprocess.Popen(cmd.decode('utf-8'),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
        correct_msg = ret.stdout.read()
        error_msg = ret.stderr.read()
        conn.send(correct_msg + error_msg)
    except ConnectionResetError:
        break

conn.close()
phone.close()

輸入ソケット

電話= socket.socket(はsocket.AF_INET、socket.SOCK_STREAM)#买电话

phone.connect(( '127.0.0.1'、8080))#クライアント接続、ダイヤルアップを確立

一方、1:
CMD =入力( '>>>')
phone.send(cmd.encode( 'UTF-8'))

from_server_data = phone.recv(1024)

print(from_server_data.decode('gbk'))

電話でphone.close()#

最後にエラーが開始されません何のリンクは、UDPではありません

でUDPソケット通信の流れ

  サーバ側の話を開始します。Serverはソケットを初期化し、その後、バインディングポート(バインド)でメッセージを受信すると、あなたは返信メッセージを受信したときrecvform、また、クライアントのアドレスを持つ2つのニュース、メッセージの内容や他のクライアントのアドレス、およびそこにあります、返送され、最終的に相互作用の接続端を閉じます

コード上の2つのファイルを作成する必要性を感じて、ファイル名やすい次のコード・サーバー・エンドをコピーし、udp_server.py(サーバー)とudp_client.py(クライアント)という名前の、私の2つのファイルを見ているの便宜のため、プレー次clietの最後にudp_server.pyファイルは、出力ウィンドウはpycharm下に見て、コードファイルをコピーudp_client.py、その後、コードudp_server.pyファイルを実行し、その後、コードudp_client.pyファイルを実行します結果に。

切断側のコードサンプル
インポートソケット
udp_sk = socket.socket(タイプ= socket.SOCK_DGRAM)#サーバは、ソケット作成
udp_sk.bind(( '127.0.0.1'、9000 ))#のバインドサーバーソケット
MSG、ADDRをudp_sk.recvfrom =(1024)
印刷(MSG)
udp_sk.sendto(b'hi」、ADDR)#対話(送受信)
udp_sk.close()#近いサーバソケット

クライアント端代码示例
インポートソケット
ip_port =( '127.0.0.1'、9000)
udp_sk = socket.socket(タイプ= socket.SOCK_DGRAM)
udp_sk.sendto(b'hello」、ip_port)
back_msg、ADDR = udp_sk.recvfrom(1024)
印刷(back_msg.decode( 'UTF-8')、ADDR)

QQチャット同様のサンプルコード:

コーディング:UTF-8

ソケットインポート
ip_port =ため( '127.0.0.1'、8081)
udp_server_sock = socket.socket(はsocket.AF_INET、socket.SOCK_DGRAM)#DGRAM:データグラムパケット通信プロトコルUDPを象徴することを意図
udp_server_sock.bind(ip_port)をあなたの外部サービスの#ポートはこの1つである、すべてのクライアントは、このポートを介して通信しています

真つつ:
qq_msg、ADDR = udp_server_sock.recvfrom(1024)#は、メッセージ受信待ち状態をブロック
プリント( 'から[%Sを:%のS]メッセージ:033 \ [1; 44メートル% 033 \ S [0メートル' %( ( 'UTF-8')ADDR [0]、ADDR [1]、qq_msg.decode))
back_msg = INPUT( 'メッセージを返信:').stripを()

udp_server_sock.sendto(back_msg.encode('utf-8'),addr)

インポートソケット
BUFSIZE = 1024
udp_client_socket = socket.socket(はsocket.AF_INET、socket.SOCK_DGRAM)

qq_name_dic = {
'taibai' :( '127.0.0.1'、8081)、
'Jedan' :( '127.0.0.1'、8081)、
'ジャック' :( '127.0.0.1'、8081)、
'ジョン' :( '127.0.0.1'、8081)
}

真の中:
qq_name = INPUT( 'とのチャット入力してください:'))(.strip
:しばらく真
( 'キャリッジリターン、入力端と彼のチャットqを送信し、メッセージを入力してください。')MSG = INPUT .stripを()
IF == MSG 'Q':BREAKは
MSGまたはNotはqq_nameないされていない場合やqq_name_dicでqq_nameは:続行
udp_client_socket.sendto#独自のアドレスを持つ必要があり、これを(msg.encode()、qq_name_dic [qq_name] 'UTF-8')は、 UDPはコネクションを確立することなく、同じ場所ではなく、サーバーへの彼のアドレスであることを、またはサーバが私にメッセージを送った者を決定することはできませんし、私たちはしているため、メッセージに返信するかわかりませんチャネル間の接続がありません

    back_msg,addr=udp_client_socket.recvfrom(BUFSIZE)# 同样也是阻塞状态,等待接收消息
    print('来自[%s:%s]的一条消息:\033[1;44m%s\033[0m' %(addr[0],addr[1],back_msg.decode('utf-8')))

udp_client_socket.close()

おすすめ

転載: www.cnblogs.com/-777/p/11366534.html