1

我的多线程 UDP 服务器最多启动 100 个线程。在每个线程中,它连接到外部设备并从每个线程接收数据流。收到它后,我有一个时间窗口,我需要在其中向外部设备发送确认。

在 run() 中接收位。

byte[] receiveData = new byte[2000];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);

接收后在 run() 中发送位。

DatagramPacket reply = new DatagramPacket(sendData,sendData.length,receivePacket.getAddress(),receivePacket.getPort();
serverSocket.send(reply);

在运行wireshark分析网络流量时,我注意到在我的服务器接收到数据流后它没有立即发送ack包,它需要几秒钟以及与其他设备的其他几次通信,直到确认包被发送到设备导致设备端超时。

在多线程环境中,服务器在发送数据包之前等待所有线程完成?

因为几乎总是从服务器发出的数据包等待作为输入到服务器的数据包。

套接字具有相同的读取和写入队列?

提前感谢您的帮助,我要疯了!:)

4

1 回答 1

0

在多线程环境中,服务器在发送数据包之前等待所有线程完成?

不。

套接字具有相同的读取和写入队列?

不。

您必须在您忽略的线程之间进行一些同步。它甚至可以在 receivePacket 本身中。

于 2013-10-07T11:33:14.350 回答