PythonのDay31:ソケットカバーのバイト、TCPプロトコルとの共通の組み込み関数、およびサーバーとクライアントの標準タグ

#ソケット

`` `Pythonの
ソケットソケットは:
ソケット端部は、ホストのIPアドレスを持つホスト上のポート番号とCPと呼ばれるエンドTCP接続などの
通信ネットワークは、エンドポイントの抽象表現の間でありますプロトコルに接続するプロトコルポート、ローカルホスト、ローカルポートプロトコル処理、リモートホストのIPアドレス、リモート・プロセスのIPアドレス:情報ネットワーク通信の5種類の要求される含みます。
使用されるトランスポート層プロトコル(TCPまたはUDP)とポート番号を使用して通信の宛先IPアドレス:ネットワーク通信と接続され、三つの主要なパラメータがあります。ソケットに意図される「ソケット。」ソケット結合「ソケット」を用いて、これら3つのパラメータを組み合わせることによって、アプリケーション層およびトランスポート層は、ソケットインタフェース、通信処理であってもよく、またはネットワーク接続とは異なるアプリケーション間で区別するために、データ伝送は同時サービスが
ありますパッケージ化モジュールは、モジュールが使用することを学ぶことである
ソケットは、2つのタイプに分け   
プロセス間通信:AF_UNIX 
AF_INET:ネットワーク通信が  
クリア必要:ネットワークプロトコルの概念とソケットに、すべてのプログラミング言語で同じです唯一の違いは、異なるプログラミング言語の名前の関数である
明確にする:それは、クライアント・サーバソケットオブジェクトの使用がされているかどうか
 
、 `` #

ソケットで一般的に使用される関数

`` `pythonの
サーバソケット関数
s.bindは、ソケットへの()バインド(ホスト、ポート番号)
s.listen()TCPリスニングを開始します
接続の到着を待っているs.accept()(ブロッキング)クライアントのTCPコネクションの受動的な受け入れ 
ためのロックソケット方式
非ブロックモードソケットを備えs.setblocking()ブロッキング
秒。 setTimeout()は、ソケット操作をブロックするタイムアウトを設定します

クライアントソケット機能の
TCPサーバ接続の初期化にs.connect()イニシアチブ
s.connect_ex()接続()関数は、拡張版エラーが発生した場合はむしろ例外で投げるよりも、エラーコードが返され

、公共用ソケット関数を
s.recv ()TCPデータ受信
s.send()TCPデータ伝送は(量は残りのスペースヘキシル端末バッファよりも大きい場合にデータが失われ、送信すべきデータを送信し、終了していない)
、実質的に(完全なTCPデータを送信するs.sendall()サイクルはsendallデータが送信されるように、送信と呼ばれ、データが失われない、残りのスペースヘキシル側のキャッシュよりも大きい場合、完成)サイクルコールまで送信
(s.recvfrom)UDPデータ受信
s.sendtoを()UDP送信
(s.getpeernameを)リモートソケットの現在のアドレスに接続されている
s.getsockname()ソケットアドレス電流
)s.getsockopt(ソケットのパラメータを返し
(s.setsockopt)を指定されたソケットパラメータを設定
S。CLOSE ()ソケットクローズ

タイムアウトのブロッキングソケットを与えることs.gettimeout()操作を

`` `

 <Pスタイル= 色:赤> TCPサーバを起動し、サーバがエラーに直接リンクすることができないため、クライアント、またはクライアントを起動する必要があります!</ p型> #の#のTCPサーバ
`` `Pythonのインポートソケット
ip_port =(127.0.0.1 、8081)#の電話カード 
BUFSIZE = 1024 
S = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM) 携帯電話の購入 
s.bind(ip_port) 電話カード 
(5)s.listenを      #の電話がスタンバイ中に真:                          新しい受信周期のリンクを電話に答えるために停止することはできません 
    CONNを、ADDR = s.accept()            





携帯電話の
    #の印刷(コネチカット州)
    #の印刷(ADDR)
    印刷' =(%sのコール受信"ADDR [0])
     しばらく真:                          新しい通信サイクルを、通信、メッセージング、継続することができ 
        MSG = conn.recv(BUFSIZE)             、メッセージを聞く、聞く
        印刷タイプ(MSG(MSGを、 ))
        conn.send(msg.upper())          メッセージ、話す 
    はconn.close()                    ハング 
S。CLOSE()                       電話オフ


`` ` 

#1 #のTCPクライアント

` `` Pythonの
インポートソケット
ip_port " 127.0を.0.1 '、8081 
BUFSIZE = 1024 
S =socket.socket(はsocket.AF_INET、socket.SOCK_STREAM)
(ip_port用)s.connect_ex            #をダイヤルし

ながら、真:                              新しい通信サイクルを、クライアントが受信したメッセージの送信を継続することが 
    MSG = INPUT(' >> ' .strip()を)
     のIF(:MSG)== 0 lenを続行
    s.send(msg.encode('UTF-8 '))         メッセージを、話す(送信のみバイトタイプ)    
    フィードバック = s.recv(BUFSIZE)                           受信したメッセージ、従順(feedback.decode(' UTF-8 ' ))
S。CLOSE()                                       

    印刷ハング

` 

、クライアントとサーバーの呼び出しに成功したリンクは、1つが近く行われていない場合は、しかし、直接プログラムを強制的に終了する(または例外が発生しました終了)強制、送信された他の問題につながる

Linuxで、当事者が無限ループで、その結果、RECV方法は、空のメッセージを受信し続け、受信したデータにつながる投げていない

ことを、上の仕事に異なるプラットフォームにアプリケーションを可能にこれらの2つの問題に対処する必要がある

次のように解決策は以下のとおりです。

`` `Pythonの
インポートソケット
ip_port用 =(' 127.0.0.1 '、8081 
BUFSIZE = 1024 
S = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM)
ip_portためs.bind( )
s.listen( 5 しばらく真:                        
    CONN、ADDR = s.accept()           
     しばらく真:                         
         試してみる
            MSG = conn.recv(BUFSIZE)             
            Linuxは、例外をスローしません、ここで判断されるように、空のメッセージを受け取ることになります
            IF  ないMSG:
                はconn.close()
                BREAKの
            印刷(MSG、型の(MSG))
            conn.send(msg.upper())         
       以外ConnectionResetError:
            あれば、サーバは、対応するリンク閉じ、例外が発生し、他方が閉じ手段として
            はconn.close()
             BREAK 
    はconn.closeを( )               
S。CLOSE()                        

``
 
これまでのTCP通信のテンプレートプログラムが完了し、あなたは常にメッセージの送受信、新しいリンクを受信し続けることができ、そしてクライアントがあるため、異常終了の閉鎖を余儀なくされることはありません!

 

おすすめ

転載: www.cnblogs.com/huhongpeng/p/10960223.html