ServerSocketChannel对应SocketChannel,ServerSocket对应Socket
第一种对应Channel、ByteBuffer,第二种对应InputStream、OutputStream
服务端
try {
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.bind(new InetSocketAddress(9999));
while (true) {
SocketChannel socketChannel = serverSocketChannel.accept();
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
String msg = "大鸡腿哦哦哦";
byteBuffer.put(msg.getBytes());
byteBuffer.flip();
while (byteBuffer.hasRemaining()){
socketChannel.write(byteBuffer);
}
byteBuffer.clear();
int i = socketChannel.read(byteBuffer);
System.out.println(i);
while (byteBuffer.hasRemaining()) {
byteBuffer.flip();
System.out.println(byteBuffer.get());
byteBuffer.clear();
i = socketChannel.read(byteBuffer);
}
}
} catch (IOException e) {
e.printStackTrace();
}
注意创建的方法和ServerSocket不同,new ServerSocket(端口号),ServerSocket.open()
客户端
try {
SocketChannel socketChannel = SocketChannel.open();
//socketChannel.configureBlocking(false);
socketChannel.connect(new InetSocketAddress("127.0.0.1", 9999));
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
byteBuffer.clear();
int i = socketChannel.read(byteBuffer);
System.out.println(i);
while (byteBuffer.hasRemaining()) {
byteBuffer.flip();
System.out.println(Charset.forName("UTF-8").decode(byteBuffer).toString());
byteBuffer.clear();
i = socketChannel.read(byteBuffer);
}
} catch (IOException e) {
e.printStackTrace();
}
连接是connnect