8070 で接続を受け入れ、クライアントごとに新しいスレッドをインスタンス化する単純な nio サーバーを実装しようとしています。基本的に、大文字と小文字を変更してクライアントに読み取った入力テキストをエコー バックします。以下はそのソースコードです。それで、誰かがそれに関する問題のトラブルシューティングを手伝ってくれますか?
public class NewIOServer {
public static void main(String[] args) throws IOException {
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.socket().bind(new InetSocketAddress("localhost", 8070));
ExecutorService pool = Executors.newFixedThreadPool(1000);
while(true) {
SocketChannel s = ssc.accept();
pool.submit(new Util(s));
}
}
}
public class Util implements Runnable {
SocketChannel sc;
public Util(SocketChannel sc) {
this.sc = sc;
}
@Override
public void run() {
try {
process();
} catch (IOException e) {
e.printStackTrace();
}
}
private void process() throws IOException {
System.out.println("Connection from:" + this.sc);
ByteBuffer buf = ByteBuffer.allocateDirect(1024);
while(sc.read(buf) != -1) {
buf.flip();
for(int i=0; i<buf.limit(); i++) {
buf.put(i, (byte)transmogrify((int)buf.get(i)));
}
}
sc.write(buf);
buf.clear();
}
public static int transmogrify(int data) {
if(Character.isLetter(data)) {
return data ^ ' ';
}
return data;
}
}
PS: サーバーソケットとソケットを使用してブロック io で同じ機能を実装しようとしましたが、正常に動作します。