gpt4 book ai didi

Java 以数据报包形式接收 Java 对象

转载 作者:行者123 更新时间:2023-12-02 00:10:20 25 4
gpt4 key购买 nike

我想以 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 创建一个新线程?

提前致谢。

最佳答案

创建一个比您期望接收的最大数据包大一倍的缓冲区。那么如果你收到一个这么大的数据包,那就是溢出了。请注意,您应该在每次接收之前重新初始化 DatagramPacket 的长度,否则它会不断缩小到迄今为止接收到的最小数据报。

如果您可以足够快地处理数据包,那么您实际上根本不需要 UDP 线程,因为没有连接需要处理。

关于Java 以数据报包形式接收 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12948774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com