2011-04-04 53 views
0

我有一个应用程序在循环中传输一些数据。 基础协议是WinSock上的UDP。如果在每次发送操作后没有添加睡眠(1ms),则大部分数据都不会发送(或wireshark无法捕获)。您是否遇到过这样的行为,UDP不会处理循环中的重复发送?UDP传输性能

问候

Tugrul

+0

您是否检查过发送函数的返回值? – 2011-04-04 14:35:51

+0

实际上在WinSock上有一个TCP客户端类,我检查它是否与某些特定的错误代码相关(但不是针对所有我认为的) – tguclu 2011-04-04 15:54:26

+0

这听起来像非阻塞套接字,即缓冲区溢出。 – 2011-04-06 04:52:18

回答

1

第一件事情,你应该检查返回值,当您将数据发送到检查数据是否发送成功与否。 第二件事,这可能发生UDP的内部缓冲区不能容纳更多的数据,因为以前的数据尚未传输。所以最简单的解决方案是,每次发送数据之前,您都应该检查UDP套接字是否可写。您可以通过在该UDP套接字上调用“select”或“poll”来完成。

+0

但它的TCP不是UDP。 – tguclu 2011-04-11 07:53:23

+1

你是什么意思?你是说有TCP和底层的UDP?我不明白。你能解释一下吗? UDP和TCP都在相同的网络层上工作,并且不能通过UDP运行TCP,反之亦然。你一定在混淆什么。请稍微解释一下。 – Tayyab 2011-04-11 19:52:31