1.ソケットは何ですか?
ソケットソケットは英語名で、我々はTCP / IPプロトコルスイートのシステムを知っているソケットが密接にトランスポート層に関連している間、状態は、その上の4つの状態、ネットワークアプリケーション層、トランスポート層、ネットワーク層、物理層とに分かれていますプロトコルのその主な成果は、TCPとUDPです。エンドツーエンドの通信トランスポート層は、従って、トランスポート層接続の各々は、2つの端部を有しています。だから、それはどのようなトランスポート層接続のエンドポイントとは?ないホストではなく、ホストのIPアドレスではなく、アプリケーションプロセス、またトランスポート層プロトコルポートです。ソケット(ソケット)と呼ばれるトランスポート層の接続エンドポイント。RFC793の定義によると:ポート番号は、ソケットのIPアドレスを形成するためにスプライシング。いわゆるソケットは、実際には、通信のエンドポイントである、各ソケットは、ソケット番号、ホストのIPアドレスを持ち、16ビットのホストポート番号、すなわちフォーム(ホストIPアドレス:ポート番号)を含みます。IPアドレスが210.37.145.1であり、ポート番号が23である場合、例えば、次にソケット(210.37.145.1:23)が得られます。
つまり、ソケットのソケット=(IPアドレス:ポート番号)は、ソケット表現は結腸またはカンマ区切りにより、小数点の上部ポートのIPアドレスの後に書き込まれます。各トランスポート層接続のエンドポイントを一意に通信の両端(すなわち、二つのソケット)が決定されます。
ソケットは、通信ネットワーク内の2つのエンドポイント・アプリケーション、各通信接続として見ることができます。この情報ようにソケットホストに送信されるネットワークアプリケーションがソケットソケットに書き込む請求情報通信の一部は、別のホストにネットワーク・インターフェース・カードに伝送媒体を介してこの情報を送信します他のプログラムに伝えることができます。従って、2つの間のデータ伝送は、アプリケーションソケットを介して達成されます。
TCP / IPは、オペレーティングシステムのコア内に封入されているので、アプリケーションは、TCP / IPを使用している場合、Webアプリケーションの設計では、システムは、プログラミングインターフェースを実装するためにTCP / IPによって提供することができます。Windows環境では、ネットワーク・アプリケーション・プログラミング・インターフェースには、Windowsソケットと呼ばれます。アプリケーション指向の通信プログラムを開発するためにユーザを支援するために、ほとんどのシステムは、TCPまたはUDPベースのアプリケーション・プログラミング・インターフェース(API)のセットを提供する、インターフェースは関数のセットの形で、通常、またソケット(ソケットと称される)。
実質的に1ソケットプログラミングフローチャート
2.ソケットとマルチスレッドチャットスレッド間通信を使用してください
サーバー側:
輸入ソケット 輸入スレッド HOST、PORT = " localhostを"、8020の アドレス = (HOST、PORT) #はsocket.AF_INET IPV4代表、socket.AF_INET6代表IPV6 #socket.SOCK_STREAM代表TCP、UDP SOCK_DGRAM代表 サーバー = socket.socket(ソケット。 AF_INET、socket.SOCK_STREAM) server.bind(アドレス) server.listen() DEF handlesock(靴下、ADDR): 一方TRUE: データ = sock.recv(1024).decode(" UTF-8 " ) であればデータ== " 終了": BREAKの 印刷(" メッセージ内容のクライアントから受信する[{0}] [{} 1]が" .format(ADDR、データ)) 応答 = INPUT(" [{0}]返信:\ T "。 。フォーマット(ADDR))エンコード(" UTF8 " ) sock.send(レスポンス) しばらくトゥルー: 私たちの靴下、ADDR = server.accept() cur_sock = threading.Thread(対象= handlesock、引数の= (私たちの靴下、ADDR)) cur_sock。開始()
クライアント:
ソケットのインポート クライアント = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM) client.connect((" ローカルホスト"、8020 )) しばらく真: レスポンス = INPUT(" サーバーの応答:").encode(" UTF8 " ) クライアント。 (Response)を送信し たIFレスポンス== " 出口" : BREAK データ = client.recv(1024).decode(" UTF8 " ) を印刷(" メッセージがサーバから受信された:%S "%のデータ) client.close()
説明: