java nio学习之(一)网络编程
程序员文章站
2022-04-24 10:51:23
...
服务端
package com.example.demo.nioSocket;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
public class CharServer {
public static void main(String[] args) throws Exception {
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
Selector selector = Selector.open();
serverSocketChannel.bind(new InetSocketAddress(9999));
serverSocketChannel.configureBlocking(false);
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
while(true){
if(selector.select(2000)==0){
System.out.println("没有客户连接");
continue;
}
Iterator<SelectionKey> iterator = selector.selectedKeys().iterator();
while (iterator.hasNext()){
SelectionKey key = iterator.next();
if(key.isAcceptable()){
System.out.println(SelectionKey.OP_ACCEPT);
SocketChannel socketChannel = serverSocketChannel.accept();
socketChannel.configureBlocking(false);
socketChannel.register(selector,SelectionKey.OP_READ, ByteBuffer.allocate(1024));
}
if(key.isReadable()){
SocketChannel channel = (SocketChannel)key.channel();
ByteBuffer buffer = (ByteBuffer)key.attachment();
channel.write(buffer);
System.out.println(new String(buffer.array()));
}
iterator.remove();
}
}
}
}
客户端
package com.example.demo.nioSocket;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
public class CharClient {
public static void main(String[] args) throws Exception{
SocketChannel socketChannel = SocketChannel.open();
socketChannel.configureBlocking(true);
if(!socketChannel.connect(new InetSocketAddress("127.0.0.1", 9999))){
while (!socketChannel.finishConnect()) {
System.out.println("未连接成功,可以做其他的事");
}
}
String msg = "hello";
socketChannel.write(ByteBuffer.wrap(msg.getBytes()));
System.in.read();
}
}