ベースのPythonのソケットネットワークプログラミングハローWebチャットアプレット

1、基本的な考え方

1.1socketソケット

ソケットは、単に、通信処理は主に異なるホストとの間で、プロセス間通信として、TCP / IPプロトコルに基づいてネットワークアドレスとポートの組み合わせ、としてオペレーティングシステムへのシステムコールを理解することができます。ソケットので、その一般に、ネットワークプログラマと主要なオペレーティングシステムとの直接TCP / IPの契約は、一般的に、適切なAPI呼び出しを提供する必要はありません。例えば、ソケットの使用は、あなたが適切なネットワークIPとポート番号をバインドすることができ、あなたが使用したり、TCP、UDPを使用するように選択することができます。

1.2tcpとUDP

TCPプロトコルはIPプロトコルの上に構築されています。TCPプロトコルは、データパケットが到着することを保証するために、2台のコンピュータ間の確実な接続を確立する責任があります。TCP接続は、パッケージが失われた場合、他の当事者は、受信されることを保証するためには、それが自動的に再発行され、各IPパケットの番号のために、そして、ハンドシェイク合意を通じて確立されます。多くの一般的な高レベルプロトコルは、このようなブラウザ、送信SMTPプロトコルのHTTPプロトコルとしてTCPプロトコルに基づいて構築されています。

UDPプロトコルを使用する場合は、接続を確立せず、唯一のあなたは、直接データパケットを送信することができ、お互いのIPアドレスとポート番号を知っておく必要があります。しかし、私たちは到達できないかわかりません。信頼性の低いUDPトランスポートデータを使用していますが、それは以上の利点があり、TCPは、信頼性の高いデータが到着速く、必要としない、あなたはUDPプロトコルを使用することができます。

1.3クライアントとサーバー

あなたはTCP接続を作成すると、受動的応答サーバ接続と呼ばれる接続、クライアントが開始と呼ばれます。私たちは、あなたのブラウザーでシナを訪問したときたとえば、お使いのコンピュータは、私たちのクライアントである、ブラウザは、SANサーバへの接続を開始します。すべてがうまくいけば、シーナは、私たちのサーバー接続を受け入れ、TCP接続が確立され、通信がページのコンテンツを返送することです。

1.4回路図

 

 

簡単なチャットプログラムに基づいて2、HIパイソン

2.1サーバプログラム

インポートソケット

SK = socket.socket() デフォルトAF_INET、SOCK_STREAMの 
アドレス=(' 127.0.0.1 '、12345 
(アドレス)sk.bind #のソケットにバインドホストポート番号 
sk.listen(3)セットとTCPリスナーの起動
を印刷するwaitting ... しながら、真は:
    CONN、ADDR = sk.accept() TCPコネクションの受動的な受け入れ、着信接続のために待機していたが、
    印刷着信接続、ADDR)
     しながら、真の:
        データ = conn.recv(1024) TCPメッセージを受信し、最大の長さを設定
        IF  ない:データ
             を印刷する' 切断!' 
            はconn.close()
            BREAKの
        印刷(STR(データ、' UTF8 ' ))
        のInP = INPUT('>> ' 
        コネティカットを。送信(バイト(INP、UTF8 ))  顧客に対するエンドループバック情報

TCPを使用して、TCPプロトコルは、SOCK_STREAMを表していることに注意してください

2.2クライアントプログラム

インポート  ソケット

SK = socket.socket() デフォルトAF_INET、SOCK_STREAMの 
アドレス=(' 127.0.0.1 '、12345 
sk.connect(アドレス)#の接続サーバ
真:
    のInP(= INPUT '>> ' IFのInP == ' 出口' BREAKの
    sk.send(バイト(INP、' UTF8 ')) サーバに送信する情報 
    データ= sk.recv(1024 印刷(STR(データ、' UTF8 ' ))

    sk.close()

結果:

 

 

3、使用straceのは、プログラムコードのAPI呼び出しを追跡します

straceののpython3 server.py

結果:

 

 

おすすめ

転載: www.cnblogs.com/ethan123/p/12008818.html