如何检查通过UDP连接交换的数据类型

时间:2014-11-19 13:36:55

标签: java sockets udp

有没有办法确定从客户端交换到服务器的数据类型?

以下是我认为答案应该如下的代码示例:

byte[] dataBook = new byte[1024];
DatagramPacket packetR = new DatagramPacket(dataBook, dataBook.length);
dS.receive(packetR);

 // the following is psuedo code
 if (packetR.getData() is off data type String) {
      // do code here
 }
if (packetR.getdata() is off data type  File) {
    // do diff code here
}

1 个答案:

答案 0 :(得分:1)

packet.getData()返回一个字节数组。由你来解释它。 基本上,您的服务器需要了解客户端用于将其数据编码为字节的方法。例如(不一定是最佳选项),您可以使用java序列化协议: 在客户端:

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(bytes);
os.writeObject(messageToSend);
os.close();
datagramPacket.setData(bytes.toByteArray());
socket.send(datagramPacket);

然后,在服务器上:

byte bytes[] = datagramPacket.getData();
ObjectInputStream is = new ObjectInputStream(new ByteArrayInputStream(bytes));
Serializable messageReceived = is.readObject();
if(messageReceived instanceof String) {
    handleString((String) messageReceived);
}
else {
   // etc.
}

您可能会发现一些有用的信息in this tutorial