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);