2012-06-20 33 views
0

我不知道为什么这是抛出错误解析完成前遇到的流的结束。我看着这link但没有在我的情况下解决了这个问题。我用的断点找到它引发错误女巫为什么在分析完成之前抛出流结束?

 Console.WriteLine("Message from client "); 

在此先感谢

if (stream.DataAvailable) 
    { 
     byte[] buffer = new byte[10024]; 
     int byteCount = stream.Read(buffer, 0, buffer.Length); 
     byte[] inBytes = new byte[byteCount]; 
     for (int counter = 0; counter < byteCount; counter++) 
      inBytes[counter] = buffer[counter]; 
     BinaryFormatter formatter = new BinaryFormatter(); 
     MemoryStream memory = new MemoryStream(); 
     memory.Write(inBytes,0,inBytes.Length); 
     object message = (object)formatter.Deserialize(memory); 
     Console.WriteLine("Message from client "); 
     memory.Close(); 
    } 

编辑*这是我不好什么是错的实际代码在这里我所犯的错误确切点在客户端。我使用Encoding.ASCII而不是binaryformatter。

回答

0

这是我的错误在这里我没有错误的实际代码,我犯了错误的客户端。我使用Encoding.ASCII而不是binaryformatter。

+0

我不同意......代码真的是错误的......你**必须**检查你有一个完整的框架,然后再尝试处理它 –

+0

以及代码本身没有完成,问题的关键点是是什么导致了这个错误,女巫在那段代码中什么都没有。现在我只是测试以确保它获取数据。那里的一些代码只是试图看看它有什么问题。对于一个使用格式化器而不是缓冲器和字节的人来说。我现在添加支票。 – Shredder2500

+0

@MarcGravell你如何检查你是否有一个完整的框架,我有同样的问题? – Smith

5

那么,你假设一个电话stream.Read将读取所有的数据。这几乎总是一个错误,特别是如果它是一个网络流。

有没有什么理由让你不只是打电话给formatter.Deserialize(stream)

+0

多数民众赞成我是如何第一次,改变它尝试和调试代码,如果我这样做,因为它在一个循环,它只是不断抛出错误,当它是现在它是唯一一次抛出一次。 – Shredder2500

+0

@ Shredder2500:什么是循环?这里你没有给出足够的上下文。如果这些是来自客户端的“消息”,那么您是否有任何类型的消息分隔符,或者您知道这个长度?只希望在一次Read调用中得到一条消息(只有一条消息)是非常糟糕的idae。 –

+0

它只是一个尽管现在不需要的永久循环。现在我只是发送一个字符串。 – Shredder2500

相关问题