我使用C# TcpClient发送一些数据包,它工作正常,但是Send()是一次接受2 2MByte的数据,所以我的上传进度计数器不能正常工作。
Console.WriteLine("New transmit pack len={0}", transmit_data.Length); while ((Transmit_offset < transmit_data.Length) && (client.sock.Poll(0, SelectMode.SelectWrite))) int sendret = client.sock.Send(transmit_data, Transmit_offset, transmit_data.Length - Transmit_offset, SocketFlags.None); //#if SocketDebug Console.WriteLine("Sent " + sendret + " bytes"); //#endif Transmit_offset += sendret; BytesOut += sendret; if (transmit_data.Length > 512) double progress = ((double)Transmit_offset / (double)transmit_data.Length) * 100; Console.WriteLine("Upload offset=" + offset + " packetlen="+PacketLen + " progress="+progress); //Console.WriteLine("Data transfer complete!"); UploadProgress = Convert.ToInt32(progress); // Console.WriteLine("Up={0}", UploadProgress); if (progress > 100) }
我的调试输出如下所示,我已经验证了这个2mb数据包最终到达了另一端,尽管我的本地Tcp客户端声称它是立即以全部有效负载的返回值发送的。
SendBufferSize=8192 New transmit pack len=47 Sent 47 bytes Connected Sending file Server v1.56.exe.... New transmit pack len=79 Sent 79 bytes New transmit pack len=2222367 Sent 2222367 bytes Upload offset=0 packetlen=11504 progress=100