2017-01-26 2 views
0

http://www.javatpoint.com/socket-programmingjava serverSocketとクライアントソケットが同じPC内でどのようにやり取りするのですか?このリンクの例によれば

iはポート何を理解しないように:6666ソケットプログラミングを説明するために使用される仮想またはRAWポートです。私はmyClient.javamyServer.javaの両方を実行した後、PCにポート6666のサーバがどのようにあるのかを知りたいと思っています。

また、実際のソケットプログラミングを実行している間、実際のサーバーの場所に配置する必要がある場合は、myServer.javaを教えてください。 serverSocketクラスオブジェクトを初期化する場所を理解したいだけです。サーバー側またはクライアント側?

また、オペレーティングシステムやPC(一般的に)は、使用可能なポートをどのように検索しますか?

答えて

0

あなたのリンクされたドキュメントは壊れていますが、ネットワークソケットがどのように機能するか少し説明します。

コンピュータには複数のネットワークインターフェイスがあります。ウィンドウを実行している場合は、ipconfig /allをlinux/osxでifconfigと実行して確認できます。 IPアドレス127.0.0.1のループバックインターフェイスがあることがわかります。また、便宜上、このループバックインターフェイスに "名前"を追加することに決めました。それはlocalhostです。 /etc/hostsファイルでは、127.0.0.1とlocalhostの間のマッピングが存在することを確認できます。

これは、コンピュータがシステムカーネルを使って自分自身でlocalhostへのルートを見つけることができると言っています。このループバックインターフェイスは仮想で、オペレーティングシステムに実装されているため、パケットはイーサネットインターフェイスまたはWi-Fiカードを経由しません。

TCPとUDPは、データを送信するためにIPの上で使用されるプロトコルです。 TCPは3-way handshake経由で接続を確立し、パケットの受信はサーバーによって確認応答されます。 UDPは非接続型であるため、クライアントはポートにパケットを送信し、確認応答は送信されません。それはちょうど巨大な要約です。

ポートでリスンしたいとき、アプリケーションは実際にオペレーティングシステムにそれを伝える必要があります。そして、OSのネットワーキングコンポーネントがTCP.dst値が6666(あなたの場合)のパケットを受信すると、アプリケーションにペイロードを送信します。 OSは、あなたから透過的であるパケットとすべての下層通信を承認する責任があります。

オペレーティングシステムは、同じポートポートを1つのアプリケーションにのみバインドできます。 Webサーバーを2回起動すると、2回目の実行は失敗します。

Linuxマシンでnetstat -lでリスンしているポートを確認できます。

関連する問題