上代码:
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Arrays;
public class Test {
public static void main(String[] args) throws Exception {
//使用 ServerSocketChannel 和 SocketChannel 网络
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
InetSocketAddress inetSocketAddress = new InetSocketAddress(8000);
//绑定端口到socket ,并启动
serverSocketChannel.socket().bind(inetSocketAddress);
//创建buffer数组
ByteBuffer[] byteBuffers = new ByteBuffer[1];
byteBuffers[0] = ByteBuffer.allocate(1024);
//等待客户端连接(telnet)
SocketChannel socketChannel = serverSocketChannel.accept();
//假定从客户端接受8个字节
int messageLength = 8;
//循环的读取
while (true) {
long r = socketChannel.read(byteBuffers);
Arrays.asList(byteBuffers)
.stream()
.map(byteBuffer -> {
// "position=" + byteBuffer.position() + ", limit=" + byteBuffer.limit();
byteBuffer.flip();
byte[] bytes = new byte[byteBuffer.remaining()];
byteBuffer.get(bytes);
return new String(bytes);
})
.forEach(System.out::println);
//将所有的buffer进行flip
Arrays.asList(byteBuffers).forEach(byteBuffer -> byteBuffer.flip());
//将所有的buffer 进行clear
Arrays.asList(byteBuffers).forEach(buffer -> {
buffer.clear();
});
}
}
}
本文展示了如何使用Java的ServerSocketChannel和SocketChannel实现网络通信,包括绑定端口、接收客户端连接和处理数据传输的过程。
1301

被折叠的 条评论
为什么被折叠?



