Java通信APIのまとめ(三)SocketChannelの使い方
1.はじめに
今回はSocketChannelの使い方を簡単にまとめてみます。
流れは以下のようにご参照ください。
- クライアント
1.SocketChannelを経由でサーバーを接続
2.データバッファを用意してサーバーへ書き出す/読み込
3.SocketChannelをクローズ
- サーバー
1.iPアドレスとポートをバインドする
2.ServerSocketChannelImpl.accept()メソッドでSocketChannelのインスタンスをもらう
3.データバッファを用意してクライアントへ書き出す/読み込
4.SocketChannelとServerSocketChannelをクローズ
じゃあ、こらから、クライアントとサーバーの通信デモを作ろう
2.クライアント
ソースコードは以下の通りです。
package socketchannel;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
public class WebClient {
public static void main(String[] args) throws IOException {
//1.SocketChannelのopen()メソッドでSocketChannelインスタンスを作ろう
SocketChannel socketChannel = SocketChannel.open();
//2.サーバーへ接続
socketChannel.connect(new InetSocketAddress("127.0.0.1", 3333));
//3.サーバーへ送信のデータを準備する
ByteBuffer writeBuffer = ByteBuffer.allocate(128);
writeBuffer.put("hello WebServer this is from WebClient".getBytes());
writeBuffer.flip();
socketChannel.write(writeBuffer);
ByteBuffer readBuffer = ByteBuffer.allocate(128);
socketChannel.read(readBuffer);
StringBuilder stringBuffer=new StringBuilder();
//4.サーバーからのデータを受け取り
readBuffer.flip();
while (readBuffer.hasRemaining()) {
stringBuffer.append((char) readBuffer.get());
}
System.out.println("サーバーからのメッセージ:"+stringBuffer);
socketChannel.close();
}
}
3.サーバー
サーバー側のソースコードは以下の通りです。
package socketchannel;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
public class WebServer {
public static void main(String args[]) throws IOException {
try {
//1.ServerSocketChannelのopen()メソッドでServerSocketChannelのインスタンスを作ろう
ServerSocketChannel ssc = ServerSocketChannel.open();
//2.ipとportをバインド
ssc.socket().bind(new InetSocketAddress("127.0.0.1", 3333));
//ServerSocketChannelImplのaccept()メソッドでSocketChannelインスタンスをもらってクライアントへの書き読み
SocketChannel socketChannel = ssc.accept();
//3.書き出すデータを準備する
ByteBuffer writeBuffer = ByteBuffer.allocate(128);
writeBuffer.put("hello WebClient this is from WebServer".getBytes());
writeBuffer.flip();
socketChannel.write(writeBuffer);
ByteBuffer readBuffer = ByteBuffer.allocate(128);
////4.読み込むデータを準備する
socketChannel.read(readBuffer);
StringBuilder stringBuffer=new StringBuilder();
readBuffer.flip();
while (readBuffer.hasRemaining()) {
stringBuffer.append((char) readBuffer.get());
}
System.out.println("クライアントからのデータを受け取り:"+stringBuffer);
socketChannel.close();
ssc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
まあ、上記のデモを実行したら、うまくいれば、結果は以下のように出ていく。
4.最後に
最後まで読んでいただき、ありがとうございます。
Author And Source
この問題について(Java通信APIのまとめ(三)SocketChannelの使い方), 我々は、より多くの情報をここで見つけました https://qiita.com/Hyman1993/items/b0295005e8107cd67fdd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .