tcp 如何调节发送速度
1、 发送端:byte[] buffers = new byte[Constants.RECORDSIZE]; FileStream fs = File.Open(filename, FileMode.Open); int n = 0; int sd,sds,allsend,ti; allsend = 0; //已发送的字节数 ti = 0; //发送次数 while (true) { n = fs.Read(buffers,0, Constants.RECORDSIZE); //从文件流中读取数据到发送缓冲区 sds = 0; while (n>0) //要求把n个字节的数据发出去 { sd = sender.Send(buffers, sds,n-sds, SocketFlags.None); ti++; //这是发送次数, allsend += sd; SendMessage(mainWindow, 2000, n, ti); sds += sd; if (sds == n) break; } if (n == 0) //文件流读取完毕,退出发送过程 break; } fs.Close();
更多0
2、如果在发送过程设置等待,情况会好些,但是无法确定等待多长时间,接收端代码: long filesize = BitConverter.ToInt64(recvbuf, 0);//接收到的文件大小 FileStream fs = File.Create(path); long recvall = 0;//接收到的字节数 while (recvall < filesize) { r = 0; try { r = handle.Receive(recvbuf, Constants.RECORDSIZE, SocketFlags.None); } catch { } if (r > 0) { recvall += r; fs.Write(recvbuf, 0, r); } } fs.Close();
3、你在接收程序捕获到异常后什么也不处理,如果这时候出现网络意外,就会在while中死循环,客户端就发送不了任何数据了。
4、你在捕获到异常后,关闭连接。客户端发生发送异常后,停上几秒,然后重新尝试连接,并从上次断点继续发送。你可以还要设计一个协议,让服务器告诉客户端成功收到数据的位置,让客户端从断点处重新传输。