0

我正在用java创建一个程序(P1),它将读取一个文件并通过网络将它发送到另一个程序(P2)。我创建了一个名为 DataGrama 的类,其中包含文件和一些我需要发送到 P2 的其他信息。我需要 P2 中的字节数组来接收数据,但 P2 不知道即将到来的数据包的大小,有没有办法发现 packetSize 以便我可以创建所需大小的字节数组?

这是我在 P1 中的内容:

 DatagramSocket clientSocket = new DatagramSocket();
 InetAddress IPAddress = InetAddress.getByName(textField.getText());
 byte[] sendData = new byte[(int)myFile.length()];
 FileInputStream convertToBytes = new FileInputStream(myFile);
 convertToBytes.read(sendData);
 convertToBytes.close();
 DataGrama dataGrama = new DataGrama(0, 0, sendData);
 sendData = serializeClass(dataGrama);
 DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9874);
 clientSocket.send(sendPacket);

在 P2 我有这样的事情:

 byte[] receiveData = new byte[50]; //<-- Here is the problem, how do I discover the size of the incoming byte array?
 DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
 serverSocket.receive(receivePacket);
4

1 回答 1

0

您只需将其分配为您期望收到的最大尺寸。

提示:如果您将其分配为该大小 +1,那么如果您收到一个DatagramPacket长度为该大小的包含 +1 的数据包,您就知道您收到了一个超大数据包。

于 2013-06-12T00:36:31.400 回答