我需要通过UDP(用户数据报协议)传输一些大数据缓冲区。该缓冲区分为1452个字节的数据报。前两个字节是数据报编号(++ dtgrNr%65536)。该数字用于检测丢失的数据报。我想控制比特率如下:
例如,对于1MBps,缓冲区长度(bufferSize)是100kB,定时器函数SendBuffer
每100ms调用一次。
对于2 MBps,缓冲区长度为200 kB,依此类推。
SendBuffer() // simplified version
{
int current_idx = 0;
while(current_idx < bufferSize)
{
GetCounterBytes(counter, ref b1, ref b2); // obtaining two bytes of datagram counter
datagram[0] = b1;
datagram[1] = b2;
Array.Copy(buffer, current_idx, datagram, 2, datagramSize);
try
{
int sentLen = udpClient.Send(datagram, datagram.Length);
if(sentLen <= 0)
Console.WriteLine("error");
}
catch .........
current_idx += datagramSize;
}
问题在于发送数据报。似乎其中一些不发送。 在循环内部调用send方法,它可能会导致一些超时问题? 但sentLen值总是> 0并且没有调用catch块。 你能帮我解决这个问题吗? 有什么建议吗?
祝你好运