【发布时间】:2012-01-06 05:24:50
【问题描述】:
我每秒接收约 3000 个 UDP 数据包,每个数据包的大小约为 200 字节。我编写了一个 java 应用程序,它监听这些 UDP 数据包并将数据写入文件。然后服务器以先前指定的速率发送 15000 条消息。写入文件后,它仅包含约 3500 条消息。使用wireshark,我确认我的网络接口收到了所有15000条消息。之后我尝试更改套接字的缓冲区大小(最初是 8496 字节):
(java.net.MulticastSocket)socket.setReceiveBufferSize(32*1024);
该更改将保存的消息数量增加到约 8000 条。我不断将缓冲区大小增加到 1MB。之后,保存的消息数量达到了 ~14400。将缓冲区大小增加到更大的值不会增加保存的消息数量。我想我已经达到了允许的最大缓冲区大小。不过,我需要捕获我的网络接口接收到的所有 15000 条消息。
任何帮助将不胜感激。提前致谢。
【问题讨论】:
-
我不会使用 UDP 来获取文件,因为文件有可能被损坏,为什么要使用 bot TCP?
-
也许文件写入是瓶颈。您是否尝试使用具有更大缓冲区大小的 BufferedOutputStream(OutputStream out, int size)?
-
Brogrammer TCP 不是多播网络的选项。
标签: java udp multicast multicastsocket