0

编辑由于下面的评论,我现在可以工作了。我还解释了我在评论中修复的内容。谢谢你们的帮助。

我正在用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();
                }

            }
        }
    }

谁能告诉我我在搞砸什么?

4

1 回答 1

0

在将 sendBack 字符串放入字节缓冲区之前,我没有执行 clear(),而是将文本添加到缓冲区的末尾,而不是开头。另外,在客户端,我使用 readLine() 来获取传入数据,但是传出服务器数据上没有回车“\r”或换行“\n”,导致我的客户端什么也没读。这两件事都修好了,让它正常工作。

于 2013-06-27T02:21:36.690 回答