package server;
import java.io.IOException;
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;
public class Server {
public static void main(String... args) throws IOException {
ServerSocketChannel server = ServerSocketChannel.open();
server.configureBlocking(false);
server.socket().bind(new InetSocketAddress(64000));
Selector selector = Selector.open();
server.register(selector, SelectionKey.OP_ACCEPT);
while(server.isOpen()){
selector.select();
for(SelectionKey key : selector.selectedKeys()){
if(key.isAcceptable()){
SocketChannel socket = server.accept();
socket.configureBlocking(false);
socket.register(selector, SelectionKey.OP_READ);
}
if(key.isReadable()){
SocketChannel socket = (SocketChannel)key.channel();
ByteBuffer socketbuffer = ByteBuffer.allocate(100);
int read = socket.read(socketbuffer);
byte[]stringarray = socketbuffer.array();
socket.write(ByteBuffer.wrap(stringarray, 0, read));
System.out.print(new String(stringarray, 0, read));
}
selector.selectedKeys().remove(key);
}
}
}
}
一切处理索引越界异常的工作真的很好,直到我退出,从客户端连接它给这个错误如何从ByteBuffer
Exception in thread "main" java.lang.IndexOutOfBoundsException
at java.nio.ByteBuffer.wrap(ByteBuffer.java:375)
at server.Server.main(Server.java:31)
Java结果:1
,当我得到这个错误它关闭了我用telnet连接的所有套接字
你想做什么?你知道'IndexOutOfBoundsException'是什么吗?你知道为什么它被扔在你的案件? –
当我用命令telnet localhost 64000关闭telnet窗口时,程序崩溃。我想修复崩溃,所以它不会发生。 –