我试图将数据包发回给用户,告知他们当前服务器上的所有人,当他们向服务器发送消息时,其中包含“who”字样。
这是我的代码:
else if( response.contains( "who" ) )
{
System.out.println( "Size of names collection: "+names.size() );
buf = null;
buf = names.toString().getBytes();
int thisPort = packet.getPort();
packet = new DatagramPacket( buf, buf.length,packet.getAddress(),thisPort );
socket.send(packet);
}
上面的print语句的输出为2,表示有两个人,例如andrew和james。现在,当我打包并发送它时,我希望它输出:
[安德鲁,詹姆斯]
但客户得到了:
[安德鲁,
就是这样。有什么问题?顺便说一句,我必须使用UDP,不能切换到TCP
的更新 的
以下是客户端类中接收数据包的代码:
while( true )
{
try
{
// Set the buf to 256 to receive data back from same address and port
buf = null;
buf = new byte[256];
packet = new DatagramPacket(buf, buf.length, address, 4445);
socket.receive(packet);
String response = new String( packet.getData() );
// Receive the packet back
System.out.println( response );
}
catch( IOException e )
{
}
}
答案 0 :(得分:4)
您的数据报被截断为256个字节,因为这是您为接收DatagramPacket声明的缓冲区的大小。如果您的数据报可以更长,请将缓冲区放大。
最佳做法是使其比您希望收到的最大数据报更大。然后,如果您收到一个那么大的应用程序协议错误。
答案 1 :(得分:1)
您应该分别在发送/接收操作(使用getLength方法)检查客户端和服务器上的DatagramPacket的长度,以确保它是相同的,这将是第一个提示。您为名称使用了什么集合?
答案 2 :(得分:0)
您的问题不完整。然而..
UDP丢失数据包。这就是为什么使用UDP进行文件传输是不可靠的。 Adobe RTMFP使用UDP传输丢失了许多数据包的音频和视频数据。但与TCP相比,音频/视频内容流传输速度确实更快。我不知道这是否回答了你的问题,我只想说UDP确实丢失了数据包。