- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好!
我正在开发 java UDP 服务器。我向我的服务器发送了大量数据,但由于接收缓冲区较小而丢失了部分传入数据包。现在我以这种方式设置接收缓冲区 -
DatagramChannel serverChannel;<br/>
serverChannel.setOption(StandardSocketOptions.SO_RCVBUF, 1024*1024*10); // 10 MB
有意义吗?这段代码没有解决丢包问题。我的操作系统 - 64 位 Windows 7。
还有一个问题 - 我的网络 Controller 的接收缓冲区属性默认为 512 - 它是字节还是兆字节?如果它是 512 bytes,是否需要手动增加此属性?我认为以编程方式增加缓冲区实际上会增加操作系统缓冲区,但这没有意义,因为最初 udp 数据包“来到”我的网卡。
最佳答案
I send a lot of data to my server and lose part of incoming packets due to small recieve buffer size.
你不知道。可能的原因有很多。
Now I'm setting recieve buffer in a such way -
DatagramChannel serverChannel;
serverChannel.setOption(StandardSocketOptions.SO_RCVBUF, 1024*1024*10); // 10 MB
Does it make sense?
实际上,这是一个巨大的缓冲区,操作系统可能会将其截断为更合理的大小。设置后尝试获取选项,看看实际大小是多少。
This code didn't solve problem of packet loosing.
没有人说会。你只是假设了。
One more question - My network controller's recieve buffer property is 512 by default - is it bytes or megabytes?
除非您告诉我们您使用的是什么 NIC,否则没人能回答这个问题,但您应该能够从制造商的数据中自行发现。
Is it necessary to increase manually this property if it's 512 bytes?
不仅没有必要,而且不可能。
I think increasing buffer programatically actually increases operating system buffer
如果您的意思是 SO_RCVBUF
控制套接字接收缓冲区大小,那是正确的。
but this doesn't make sense
是的。
because initially udp packets "come" to my network card.
然后从那里进入操作系统,从那里进入 IP 堆栈,从那里进入 UDP 堆栈,然后从那里进入套接字接收缓冲区。当大多数路径 MTU 高达 1500 字节时,NIC 似乎不太可能有 512 字节的缓冲区,但它确实有意义,例如 512k。你可以假设它就足够了,毕竟它确实有效。
您的基本假设有缺陷。 UDP 数据包可能由于多种原因而丢失:它们从未被发送,它们被中间路由器丢弃,它们被分成碎片并且不是所有碎片都到达接收者,或者接收者的套接字接收缓冲区已满,这反过来可能是因为它太小或因为接收方跟不上发送方。仅使用巨大的套接字接收器缓冲区只能解决这些问题之一。如果您需要可靠性,请使用 TCP,或者实现带有重试的 ACK 或 NACK 机制。
关于java - 以编程方式增加 UDP 缓冲区 - 这有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15469365/
我刚刚了解了 udp 校验和计算。 但我很困惑算法是否检测到所有错误。 最佳答案 当然不是。没有校验和可以检测到所有错误。 关于udp - UDP 校验和是否检测到所有错误?,我们在Stack Ove
下面这个函数有什么问题?? 它应该抛出错误,因为我没有在本地主机上运行 UDP 服务器。 int openUdpSocket(int port) { int sock,sin_size;
我正在尝试修改这两个程序。我想让 udpclient.c 能够接收消息并让 udpserver.c 将消息回显给客户端。我还想在 udpclient 发送消息之前先获取它们的时间标记消息。收到的消息应
我有相当简单的 UDP 服务器写在 c 上。 有时我需要知道在套接字中排队的所有 udp 数据包(字节)的当前长度。 据我了解,getsockopt 没有得到这样的信息。 欢迎使用 Linux 和 F
除了直播音乐/视频外,谁能告诉在哪里使用 UDP 协议(protocol)? UDP 的默认用例是什么? 最佳答案 其他任何您需要性能但如果数据包在途中丢失时可以生存的东西。例如,多人游戏浮现在脑海中
与 TCP 的监视方法相反,UDP 是否会在所有数据包可用时立即发送它们? 谢谢。 最佳答案 TCP 有拥塞控制,UDP 没有,因为它是无连接的。 但是您的问题涉及多个问题:发送消息是否会导致立即发送
我知道 UDP 本质上是不可靠的,但是当连接到 localhost 时,我希望内核以不同的方式处理连接,因为一切都可以在内部处理。那么在这种特殊情况下,UDP 是否被认为是一种可靠的协议(protoc
我正在尝试使用 flash 和 rtmfp 协议(protocol)开发一个实时视频聊天应用程序,但我有疑问rtmfp 如何保证连接对等点,尤其是当对等点位于不同网络时。 最佳答案 RTMFP 依靠中
我发现所有使用 Netty 4.0 的 TCP 服务器实现都使用了 ServerBootstrap 实例。 The biggest and only difference between a serv
对于个人 MMO 游戏项目,我正在 java 中实现一个自制的可靠的基于 UDP 的协议(protocol)。鉴于我当前的设置,我相信窥探者劫持 session 相对简单,因此为了防止这种情况,我借此
我正在尝试手动计算各种 UDP 数据包的校验和,但与 Wireshark 中显示的结果相比,我总是得到错误的结果。下面是我如何做到这一点的示例: Source Address: 192.168.0.1
我正在尝试手动计算各种 UDP 数据包的校验和,但与 Wireshark 中显示的结果相比,我总是得到错误的结果。下面是我如何做到这一点的示例: Source Address: 192.168.0.1
我有一个奇怪的问题。我有一个成功运行的 C++ (boost asio) P2P 应用程序,它可以在大多数 NAT 上运行。问题是,当我将初始启动端口号指定为 1000 时,它会检查 1000 是否空
带有数据源的短 radio 链路,需要通过 IPv6 的 1280 Kbps 吞吐量,使用 UDP 停止和等待协议(protocol),该区域内没有其他客户端或明显的噪声源。我到底如何才能计算出最佳数
似乎可以在没有有效负载的情况下发送 UDP 数据包。 我能想到的唯一不需要有效载荷的就是用于 NAT 打洞。 这还能用来做什么? 这与我之前的问题有关Under Linux, can recv eve
我有一个客户端,我无法更改其代码 - 但我想(重新)使用 编写代码ZeroMQ socket 。 客户端同时使用原始 TCP 和原始 UDP socket 。 我知道我可以使用 ZMQ_ROUTER_
网络 4.0.24 我通过 UDP 传递 XML。收到 UPD 数据包时,数据包的长度始终为 2048,截断消息。尽管如此,我尝试将接收缓冲区大小设置为更大的值(4096、8192、65536),但它
我正在尝试编写一个有关 UDP 连接的简单程序来了解它们。我已经实现了一些基本的事情,但是当我尝试发送并取回我发送的内容时,我遇到了一些问题,例如, 当我这样做时;发送一个字符串 “asd”到服务器我
当我检查时,我在 UDP 客户端每 100 毫秒从服务器发送 UDP 数据包 接收频率不等于 100 毫秒,有时它要少得多,例如 3 毫秒…10 毫秒。 我知道UDP client server是异步
海友我是一个学习winsock2的新手。以下是我的udp服务器和客户端程序。 我这个程序客户端不知道服务器的IP地址,只知道端口。但是服务器会在整个网络中广播一条消息。 当客户端收到消息时,它会回溯服
我是一名优秀的程序员,十分优秀!