【发布时间】:2011-12-30 19:09:40
【问题描述】:
我正在Java 中构建一个实验性游戏服务器。
客户端发送:
length: 22\r\n
playerId: 0\r\n
\r\n\r\n
this is a test message
Java接收消息的代码:
String message = "";
byte[] buf = new byte[20];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socketServer.receive(packet);
message += new String(buf, "UTF8");
buf = new byte[20];
packet = new DatagramPacket(buf, buf.length);
socketServer.receive(packet);
message += new String(buf, "UTF8");
这不会收到客户端发送的消息的 40 个字节,它接收 20 个字节,然后在第二个 socketServer.receive(packet) 它挂起等待新消息。
原因:
此方法阻塞,直到收到数据报。长度字段 数据报包对象包含接收到的长度 信息。如果消息长于数据包的长度,则 消息被截断。
我需要能够读取 20 个字节的消息和另外 20 个字节的消息。如何实现?
我需要这个,因为我不确定消息会持续多久。我想要这样的东西:
String message = "";
while (!message.contains("\r\n\r\n")) { //"\r\n\r\n" marks end of message
byte[] buf = new byte[20];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socketServer.receive(packet);
message += new String(buf, "UTF8");
}
假设消息以 \r\n\r\n 结尾,这将得到完整消息。
需要通过UDP 协议完成。我是Java 中的套接字的新手,但我认为这有一些东西,只是找不到。提前致谢。
【问题讨论】:
标签: java sockets networking udp