Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 降低TCP/IP接收速度_C#_Sockets_Tcp_Tcpclient - Fatal编程技术网

C# 降低TCP/IP接收速度

C# 降低TCP/IP接收速度,c#,sockets,tcp,tcpclient,C#,Sockets,Tcp,Tcpclient,我编写了一个简单的.Net客户端,它通过TCP/IP连接到硬件设备(FPGA)。当我单击客户端中的按钮时,它会向设备发送一个小的(4字节)“请求”,然后立即读取设备响应的数据块(约32kb)。客户端代码如下所示:- var stream = _tcpClient.GetStream(); stream.Write(requestData, 0, requestData.Length); using (var ms = new MemoryStream()) { var tempBuf

我编写了一个简单的.Net客户端,它通过TCP/IP连接到硬件设备(FPGA)。当我单击客户端中的按钮时,它会向设备发送一个小的(4字节)“请求”,然后立即读取设备响应的数据块(约32kb)。客户端代码如下所示:-

var stream = _tcpClient.GetStream();

stream.Write(requestData, 0, requestData.Length);

using (var ms = new MemoryStream())
{
    var tempBuffer = new byte[65535];
    do
    {
        var numBytesRead = stream.Read(tempBuffer, 0, tempBuffer.Length);
        ms.Write(tempRead, 0, numBytesRead);
    }
    while(ms.Length < ExpectedResponseSize);

    _hardwareResponse = ms.ToArray();
}
var-stream=\u tcpClient.GetStream();
stream.Write(requestData,0,requestData.Length);
使用(var ms=new MemoryStream())
{
var tempBuffer=新字节[65535];
做
{
var numBytesRead=stream.Read(tempBuffer,0,tempBuffer.Length);
ms.Write(tempRead,0,numBytesRead);
}
而(ms.Length
在上述代码中使用秒表通常会报告2-3ms来读取整个32kb的响应,如果我缓慢地重复单击按钮(例如每秒一次),则此计时保持一致

如果我开始更快地单击按钮(例如,每半秒一次),那么几秒钟后,计时突然下降到12毫秒左右,并保持不变,即使我再次缓慢地单击按钮。如果我关闭然后重新打开客户端上的连接并重试,则返回到2-3ms次


WireShark显示,在更快的响应过程中,电脑会发出3-4次ACK,但一旦计时降至12毫秒,则会增加到十几次或更多。在这两种情况下,来自FPGA的数据包的数量和大小是相同的。我尽可能自信地认为,这不是客户端或FPGA上的代码中的问题(两者都不能变得更简单)-直觉认为这是一个协议或网络问题。有什么想法吗

你看过这个类似问题的各种答案了吗:?我怀疑问题在于窗口大小或ack算法对自身进行了悲观的重新配置,但真正弄清问题的唯一方法是尝试在客户端和服务器上一次调整一件事情,直到发现性能差异为止。许多自适应算法(如Nagle)在默认情况下使用,有时会对本地流量产生意外的影响