ソケットの第4章のJavaの使用法
4.1ソケット一般的な使用法
Javaのネットワーク通信がソケット、にソケットを介して達成されるServetSocketとソケット 2つのカテゴリのためにServetSocket サーバ要求を聞くことはソケットを返した後、リスナーは、プロセスによる要求を受け入れることができ、特定のデータ伝送のためのソケットが終了すると、ソケットクライアントが直接リクエストを開始とデータを送信します。
ServerSocketの使用は、3つのステップに分けることができます。
1)のServerSocketを作成します。ServerSocketのコンストラクタ最も便利と5の合計は、ServerSocketを(int型ポート)であることに一つだけのポート(ポート番号)が必要です。
2)呼び出しは、リスニングを受け入れるServerSocketのメソッドの外に作成されます。この方法は、ブロッキング方法、呼び出されるメソッドです受け入れるプログラムが停止し、接続要求を待ちます受け入れ要求が受信されるまで、プログラムは要求を受信した後、ダウンして行くことはありません方法を受け入れるソケットを返します。
3)ソケットメソッドは、クライアントとの通信に戻り受け入れます。
サービスは、例を使用しています。
パブリック クラスServerは、{ / ** *サーバのServerSocketをした後、リスナーは法によって要求を受け入れることができ、監視対象の要求はソケットを返し、 *特定のデータ転送用のソケットは、クライアントが直接ソケット開始要求を使用してデータを送信し、完了です。 * @Paramの引数 * / パブリック 静的な 無効メイン(文字列[] args)を{ 試み{ // リスニングポート8080 ServerSocketを作成 ServerSocketのサーバーを= 新しい新しい ServerSocketを(8080 ); // ウェイト要求 ソケットソケット= server.accept(); / / BufferedReaderの作成データを読み出すために、要求を受信した後、ソケット通信を使用して BufferedReaderのは= IS 新しい新BufferedReaderの(新しいInputStreamReaderの(socket.getInputStream())); 列ライン = is.readLine()。 (System.out.printlnは「クライアントから受け取った:」+ ライン)。 // 创建のPrintWriter、用于发送数据 のPrintWriter PW = 新規のPrintWriter(socket.getOutputStream())。 pw.println( "受信データ:" + ライン)。 pw.flush(); pw.close(); 近くにあります(); socket.close(); server.close(); } キャッチ(IOExceptionを電子){ e.printStackTrace(); } } }
クライアントは、例を使用します。
パブリック クラスクライアント{ / ** 自動的にサーバーに送信され、その後、データは最終的には、サーバから返されたとコンソールに出力し、受信開始後、* msgが接続解放リソース閉じ * @paramの引数 * / パブリック 静的な 無効メイン(文字列を[]引数){ 試み{ 文字列MSGは =「クライアントデータ」; //はソケットを作成し、ポート8080が機械に接続されている ソケットのソケット= 新しい新しいソケット(「127.0.0.1」、8080 ); // ソケットを使用してPrintWriterを作成しますBufferedReaderのデータは、読み取りと書き込み のPrintWriter PW = 新新のPrintWriter(Socket.getOutputStream())を、 BufferedReaderのは、IS= New新しい BufferedReaderの(新新; InputStreamReaderの(Socket.getInputStream())) // データ送信 pw.printlnを(MSG); pw.flushを(); // データ受信 文字列=ラインis.readLineを(); System.out.printlnはを( "サーバーからreveived:" + ライン); // リソース閉じ pw.closeを(); is.close(); Socket.close(); } キャッチ(例外E){ e.printStackTrace(); } } }
4.2 NioSocketの使用状況
NIO(新しいIO)、元のServerSocketとソケットに対応するのServerSocketChannel SocketChannelへ提供します。
バッファ、チャンネル和セレクター
バッファ:私は品物を送りたいです。
チャンネル:宅配便(とやエリア行きトラック)。
セレクター:ソータートランジット駅。
NioSocketの使用は、まずあなたがセレクタでリクエストを受信して処理することができ、その後、セレクタを登録し、のServerSocketChannelを作成します。
ServerSocketChannelは、オープンを作成するために、独自の静的なファクトリメソッドを使用することができます。各のServerSocketChannelはServerSocketをに対応して、あなたは、通常のServerSocketを取得するために使用するポートをバインドするために、取得するためにそのソケットメソッドを呼び出しますが、要求をリッスンするためのServerSocketを取得するために直接使用した場合、それは元の処理モードだったことができます。ServerSocketChannelができconfigureBlockingあなたが採用したい場合は、ブロッキングモードを採用するかどうかを設定する方法非ブロックモードを使用することができますconfigureBlocking(false)を非ブロックモードの設定、コールの後に設定することができ、レジスタの登録セレクターを使用する方法を(ブロックモードを使用することはできませんセレクター)。