【发布时间】:2012-10-08 13:32:35
【问题描述】:
我想以 UDP 数据包的形式发送一个对象,然后在服务器上接收该对象。我已经弄清楚客户端,但我无法让服务器正确读取数据报。
客户代码:
public void sendMessage() {
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
try {
ObjectOutput oo = new ObjectOutputStream(bStream);
oo.writeObject(asset);
// Send it
byte[] serializedMessage = bStream.toByteArray();
DatagramPacket sendPacket = new DatagramPacket(serializedMessage,
serializedMessage.length, ipAddress, sPort);
clientSocket.send(sendPacket);
oo.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
服务器尝试失败。
public void startServer() {
try {
serverSocket = new DatagramSocket(this.serverPort);
serverSocket.receive(new DatagramPacket()); /*Code fails here, I realise
* the constructor does not have input, but I can not figure out how to init
*a buffer whose size I do not know beforehand.
*/
this.threadPool.execute(new QueryTask(packet));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我使用以下问题Sending Objects Across Network using UDP in Java发送对象,但没有显示他是如何收到该对象的。
问题 2: 收到并解析数据包后创建一个新线程更好,还是应该在 Datagrampacket 上使用 DatagramSocket 创建一个新线程?
提前致谢。
【问题讨论】:
-
我知道您专门询问数据报 UDP 连接,但您是否考虑过 RMI/JAX-WS(SOAP)/JAX-REST?
-
您也可能会发现这回答了您的问题:stackoverflow.com/questions/3997459/…
标签: java network-programming udp threadpool