编辑由于下面的评论,我现在可以工作了。我还解释了我在评论中修复的内容。谢谢你们的帮助。
我正在用java开发一个多人游戏。到目前为止进展顺利,但我遇到了服务器向客户端发送信息的问题。这个过程应该是,服务器从客户端接收信息并解释它应该做什么。在这种情况下,客户端向服务器发送一条聊天消息,以逗号分隔。“聊天,鲍勃,消息在这里。” 此时,服务器本质上应该将相同的信息发送回发送消息的客户端。不知何故,在此过程中,容纳信息的 ByteBuffer 被破坏了?
以下是服务器的相关代码:
// Read the data
SocketChannel sc = (SocketChannel) key.channel();
// interpret
int bytesEchoed = 0;
while (true) {
//Clears this buffer.
echoBuffer.clear();
int number_of_bytes;
String message = new String(echoBuffer.array());
String[] splits = message.split(",");
try {
number_of_bytes = sc.read(echoBuffer);
} catch (java.io.IOException e) {
key.cancel();
number_of_bytes = -1;
}
//-----------Interpret Packets--------------------
//-------------Chat-----------------
if (splits[0].contentEquals("chat")) {
//do chat shit
String name = splits[1];
String text = splits[2];
String sendBack = "chat," + name + "," + text + ","+"\r";
System.out.println(sendBack);
if (splits[0].equals("chat")) {
echoBuffer.clear();
echoBuffer.put(sendBack.getBytes());
}
}
//
if (number_of_bytes <= 0) {
break;
}
//
//
echoBuffer.flip();
sc.write(echoBuffer);
bytesEchoed += number_of_bytes;
}
System.out.println("Echoed " + bytesEchoed + " from " + sc);
// once a key is handled, it needs to be removed
it.remove();
}
}
}
}
谁能告诉我我在搞砸什么?