1
|
usr-local-ÎΨÎÎÎΩΠ· 技术社区 · 14 年前 |
1
1
receiveBufferSize确实会影响到UDP套接字(即udpclient),如果数据包丢失是由于缓冲区溢出,那么增加receiveBufferSize将有所帮助。 请记住,如果数据速率太高,以至于您无法足够快地从缓冲区读取足够长的时间,那么即使是最大的缓冲区,也不可避免地会溢出。 我已经在运行在Ubuntu上的mono 2.6.7上有效地使用了udpclient.client.receiveBufferSize,所以我相信mono的实现是好的,当然我还没有在mono 2.8上使用它。 根据我的经验,以极高的速率向本地主机发送UDP数据包,可能会有一些数据包丢失,尽管我从未在现实世界应用程序中经历过这种数据包丢失。因此,您可能在这种方法上取得了一些成功。 您还需要看看是否发生了数据包丢失,这可能是由于网络基础设施、数据包冲突、交换机可能因为交换机上的某些限制而丢弃数据包。 简单地说,在使用UDP时,您需要准备好处理和预期数据包丢失。 |
2
0
如果您使用的是UDP,则必须预期数据包丢失。数据包丢失的原因很多。对于您来说,最可能的原因是数据包在通道上的任何位置都被溢出。可能是你的开关,也可能是你的接收器。过度泛滥的原因是因为UDP没有任何类型的拥塞控制。TCP确实有拥塞控制(缓慢启动),这就是为什么在TCP中,它从不(理论上在理想环境下)过度泛滥的原因。 采用TCP慢启动拥塞控制策略是防止UDP传输超淹没的有效方法。 回答你直截了当的问题 1。不。请参阅TCP慢速启动算法。 2。很可能这不是一个错误。UDP就是这样设计的。这是有原因的,需要这样做。 三。不,代理没有帮助。 4。最简单的实现方法是在发送更多数据包之前等待接收器的确认(注意接收器已成功接收到数据包)。当然,这对防止由于其他原因造成的数据包丢失没有帮助。 |
3
0
显然,在3.2.7版本之前的mono中,设置socket-receive缓冲区的大小严重中断:它将被设置为随机值,而不是指定的大小,因此尝试增加缓冲区的大小实际上会使性能变差:-( https://github.com/mono/mono/commit/bbd4ee4181787189fbb1f8ba6364afdd982ae706 |
LA.27 · F#在Linux上-目标是net4xx 6 年前 |
tayoung · 如何在GTK中禁用TextView的透明度? 6 年前 |
McKay · C#WebRequest成功。NET但使用Mono失败 6 年前 |
Cristian M · 将24位2的补码转换为int? 6 年前 |
MadeInDreams · 更改Unity中的默认IDE 6 年前 |