ジェーンは言った
JavaでTCP / IPを使用してネットワーク経由でサーバーに接続する場合は、サーバーに接続するjava.net.Socketオブジェクトを作成する必要があります。JavaNIOを使用する場合は、JavaNIOでSocketChannelオブジェクトを作成することもできます。
最初のステップは、ソケットを作成することです
次のサンプルコードは、IPアドレス89.53.64.191のサーバーのポート80に接続します。サーバーはWebサーバーであり、ポート80はWebサービスポートです。
Socket socket = new Socket("89.53.64.191", 80);
次の例のように、IPアドレスの代わりにドメイン名を使用することもできます。
Socket socket = new Socket("wyzhang.com", 80);
2番目のステップソケットはデータを送信します
Socketを介してデータを送信し、Socketの出力ストリーム(OutputStream)を取得します。サンプルコードは次のとおりです。
Socket socket = new Socket("jenkov.com", 80);
OutputStream out = socket.getOutputStream();
out.write("some data".getBytes());
out.flush();
out.close();
socket.close();
コードは非常に単純ですが、ネットワークを介してサーバーにデータを送信する場合は、flush()メソッドを呼び出すことを忘れないでください。オペレーティングシステムの下部にあるTCP / IP実装は、最初にデータをより大きなデータバッファーブロックに入れ、バッファーブロックのサイズはTCP / IPデータパケットサイズに適合されます。
3番目のステップソケットがデータを読み取る
ソケットからデータを読み取るには、ソケットの入力ストリーム(InputStream)を取得する必要があります。コードは次のとおりです。
Socket socket = new Socket("jenkov.com", 80);
InputStream in = socket.getInputStream();
int data = in.read();
//... read more data...
in.close();
socket.close();
コードは複雑ではありませんが、ソケットの入力ストリームからデータを読み取ってもファイルは読み取られないことに注意してください。ソケットがサーバーの場合のみ、-1が返されるまでread()メソッドが呼び出されます。接続が閉じられると、ソケットの入力ストリームは-1を返しますが、実際にはサーバーは接続を閉じ続けません。接続を介して複数のリクエストを送信する場合、この場合の接続のクローズは非常に愚かです。
したがって、ソケット入力ストリームからデータを読み取るときは、読み取る必要のあるバイト数を知る必要があります。これは、送信されたバイト数をサーバーにデータに通知させるか、データの最後に特殊文字を設定することで実現できます。マーキング方式も実現。
最後にソケットを閉じます
ソケットを使用した後、ソケットを閉じてサーバーとの接続を切断する必要があります。Socketを閉じるには、Socket.close()メソッドを呼び出すだけです。コードは次のとおりです。
Socket socket = new Socket("jenkov.com", 80);
socket.close();
結論
ソケットは実際には同じです。入力ストリームと出力ストリームを書いても問題ありません。プログラミングを学びたい場合は、プライベートメッセージで「learn」に返信し、第一線のメーカーからのJavaインタビューの質問の概要+ Alibaba Taishanマニュアル+さまざまな知識を受け取ることができますポイントラーニングガイド+ 300ページのPDF文書でのJavaコアナレッジポイントの概要!
みなさんの研究の進歩を祈っています!