Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA-多线程服务器-接收和发送之间的延迟_Java_Multithreading - Fatal编程技术网

JAVA-多线程服务器-接收和发送之间的延迟

JAVA-多线程服务器-接收和发送之间的延迟,java,multithreading,Java,Multithreading,我的多线程UDP服务器最多启动100个线程。在每个线程中,它连接到外部设备并从每个线程接收数据流。在收到它之后,我有一个临时窗口,在这个窗口中我需要向外部设备发送一个确认 在运行中接收位。 接收后运行内部发送位。 当运行wireshark分析网络流量时,我注意到,在我的服务器接收到数据流后,它不会立即发送ack包,它需要几秒钟以及与其他设备的其他几次通信,直到确认包发送到设备,导致设备端超时 在多线程环境中,服务器在发送数据包之前等待所有线程完成 因为离开服务器的数据包几乎总是等待输入到服务器的

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

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

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

因为离开服务器的数据包几乎总是等待输入到服务器的数据包

套接字具有相同的读写队列

提前谢谢你的帮助我快发疯了

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

没有

套接字具有相同的读写队列

没有


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

您的serverSocket是如何定义的?创建100个线程是否比以太网连接允许的带宽更多?DatagramSocket Socket7300=新DatagramSocket7300;没有足够的上下文。接收和发送之间发生了什么?多线程中的任何内容都不会使服务器在发送之前等待线程完成,除非您以这种方式对其进行编码。不,发送和接收缓冲区是不同的@stonemetal这是接收和发送之间发生的事情这里是我的服务器sode->我没有在任何地方使用同步。我应该吗?我所做的唯一一件事就是每次新的通信我都会添加一个线程每次线程死亡我都会减少线程数。最多100.dl.dropboxusercontent.com/u/31910411/code.txt演示了一个非常好的复制粘贴体系结构。我是个新手。我在和最好的人一起学习。加法/减量计数器可能是问题的根源吗?@Thelma在跳转到多线程程序之前,你真的应该学习如何编写单线程代码。你缺少了一些基本的东西,比如数组,没有可以编写的合理程序。谢谢,@Voo你能给我一些参考资料吗?
byte[] receiveData = new byte[2000];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
DatagramPacket reply = new DatagramPacket(sendData,sendData.length,receivePacket.getAddress(),receivePacket.getPort();
serverSocket.send(reply);