Java NIO を使用してクライアント サーバー Java プログラムを実行しています。基本的にサーバーコードについては、ここから取得しました。そして、クライアント側については、ここから取得しました。今は良さそうです。私が今達成したいのは、クライアントからサーバーにデータを送信し、サーバーがクライアントに送り返すことです。
しかし、私はロジックに問題があります。「AMessage」を入力すると、サーバーから「AMessage」を取得するために「BMessage」を入力する必要があります。私はデバッグを行いましたが、key.isConnectable()
常に returnのようtrue
です。キーインタレストを設定して再登録しようとしましたが、まだ解決策が見つかりませんでした。
これを試してみましたがkey.interestOps(0);
、myChannel.register(selector, SelectionKey.OP_READ);
何も起こらないようです。isConnectable
まだtrueを返しました。ローカルホストの問題であると他の人から報告されたいくつかの問題を見つけました。何も思いつきません。しかし、今はサーバーとクライアントを localhost で実行しています。誰でも何か考えがありますか?
ありがとう :)
編集:これは私のコードの一部です:-
if (key.isConnectable()) {
if (myChannel.isConnectionPending()) {
try{
myChannel.finishConnect();
}
catch(IOException e){
System.out.println(e);
}
System.out.println("Status of finishCOnnect(): " + myChannel.finishConnect() );
System.out.println("Connection was pending but now is finished connecting.");
}
ByteBuffer bb = null;
ByteBuffer incomingBuffer = null;
Scanner input = new Scanner(System.in); // Declare and Initialize the Scanner
while (true) {
System.out.println("Status isReadable is " + key.isReadable() + " and isWritable is " + key.isWritable() +
" and isConnectable is " + key.isConnectable());
readMessage(key); //read if server send data
//send data to server here
String inputFromClient = input.nextLine(); //Get the input from client
System.out.println("debugging after get input...");
bb = ByteBuffer.allocate(inputFromClient.length()); //Allocate buffer size according to input size
byte[] data = inputFromClient.getBytes("UTF-8"); //convert the input to form of byte
bb = ByteBuffer.wrap(data); //wrap string inside a buffer
myChannel.write(bb); //Write the buffer on the channel to send to the server
bb.clear();
}
}