Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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# ReadAllbytes方法未完成-网络流_C#_.net_Networking - Fatal编程技术网

C# ReadAllbytes方法未完成-网络流

C# ReadAllbytes方法未完成-网络流,c#,.net,networking,C#,.net,Networking,我有一个ReadAllBytes方法,它应该读取一定数量的数据 来自网络流的字节数 private void ReadAllBytes(byte[] buffer, int length) { if (buffer.Length != length) throw new Exception("WriteBytes: Length should be same"); Stream stm = m_client.GetStream(); // Start

我有一个
ReadAllBytes
方法,它应该读取一定数量的数据 来自
网络流的字节数

private void ReadAllBytes(byte[] buffer, int length)
{
    if (buffer.Length != length)
        throw new Exception("WriteBytes: Length should be same");

    Stream stm = m_client.GetStream();

    // Start reading
    int offset = 0;
    int remaining = length;
    while (remaining > 0)
    {
        int read = stm.Read(buffer, offset, remaining);
        if (read <= 0)
            throw new EndOfStreamException
                (String.Format("ReadAllBytes: End of stream reached with {0} bytes left to read", remaining));
        remaining -= read;
        offset += read;
    }
}
有人能帮我吗有什么问题吗?我认为这与超时有关,但如何确定呢?如何解决这个问题

这是否与我如何处理这门课有关


我也没有任何例外。

这种方法似乎很好。您有多确定流可以交付您认为应该交付的字节数?发件人是否保证发送正确的金额

问题在于没有足够的数据。这是一只虫子。超时并不能修复错误,它是一种中断读取的方法,这样当网络故障时,应用程序不会永远挂起(同时也不会造成灾难性的错误)。修复错误。但也要保持超时,以防万一

<>我也不认为当我使用现有C++项目

时会出现bug。 这意味着该漏洞存在于您的C#代码中。这不是一个C#东西,read原则上不能以任何其他方式工作。你认为read在没有数据的情况下应该做什么?它可以等待,也可以失败。没有其他选择

在没有数据时调用Read是您的错误/问题/错误。不认错

应该引入超时;是的,但我更喜欢例外,而不是永远等待


是的,当网络通信出现故障(或者你有一个bug,不想永远挂断)时,总是需要超时。总是有一个超时时间。

这个方法看起来不错。您有多确定流可以交付您认为应该交付的字节数?发件人是否保证发送正确的金额

问题在于没有足够的数据。这是一只虫子。超时并不能修复错误,它是一种中断读取的方法,这样当网络故障时,应用程序不会永远挂起(同时也不会造成灾难性的错误)。修复错误。但也要保持超时,以防万一

<>我也不认为当我使用现有C++项目

时会出现bug。 这意味着该漏洞存在于您的C#代码中。这不是一个C#东西,read原则上不能以任何其他方式工作。你认为read在没有数据的情况下应该做什么?它可以等待,也可以失败。没有其他选择

在没有数据时调用Read是您的错误/问题/错误。不认错

应该引入超时;是的,但我更喜欢例外,而不是永远等待



是的,当网络通信出现故障(或者你有一个bug,不想永远挂断)时,总是需要超时。始终有一个超时。

当网络流的大小超过长度时,会出现错误?如果长度应该相等,为什么还要添加参数
length
?只需使用
buffer.Length
。什么是lengthArray?@amitdayama:只是一个字节数组“但是什么会导致它无限期地等待?”没有足够的字节进入。这是读取块的唯一原因。找出字节不足的原因。这个问题无法用给出的信息来回答。当网络流的大小超过长度时,就会出现错误?如果长度应该相等,为什么还要添加参数
length
?只需使用
buffer.Length
。什么是lengthArray?@amitdayama:只是一个字节数组“但是什么会导致它无限期地等待?”没有足够的字节进入。这是读取块的唯一原因。找出字节不足的原因。这个问题不能用给出的信息来回答。你说这是我C代码中的错误,但我基本上给你看了我的C代码。请看这里:,了解更多有关我的网络课程的详细信息。如果你能指出这个错误,我也会接受这个答案,还有这个。这个错误在这里是看不见的。它在别处。读取功能正常。问题是流中剩下的数据太少。要么发送的信息不够,要么你在别处读了太多。你的意思是在我链接的另一个问题中也看不到?这基本上是我的完整网络课程:。请看一下那本书,我忘了看那里了。代码看起来很好。事实上比我见过的大多数套接字代码都要好。我看不出有什么问题。可能,发件人被破坏,而您的其他C++客户端在接收时有bug。它应该被阻塞/挂起,但它没有。非常感谢你的好话!!事实上,现在我在C端添加了超时,它工作得更加稳定,不再挂起,你认为呢?你说这是我C代码中的错误,但我基本上向你展示了我的C代码。请看这里:,了解更多有关我的网络课程的详细信息。如果你能指出这个错误,我也会接受这个答案,还有这个。这个错误在这里是看不见的。它在别处。读取功能正常。问题是流中剩下的数据太少。要么发送的信息不够,要么你在别处读了太多。你的意思是在我链接的另一个问题中也看不到?这基本上是我的完整网络课程:。请看一下那本书,我忘了看那里了。代码看起来很好。事实上比我见过的大多数套接字代码都要好。我看不出有什么问题。可能,发件人被破坏,而您的其他C++客户端在接收时有bug。它应该被阻塞/挂起,但它没有。非常感谢你的好话!!事实上,现在我在C端添加了超时,它工作得更稳定,不再挂起,你觉得呢??
public TcpClient m_client = new TcpClient();
m_client.Connect(IP,port);
ReadAllBytes(lengthArray, 2);