none
关于NetworkStream.Length的问题? RRS feed

  • 问题

  • 在用socket 时,由于NetworkStream.Length不受支持,那么当接收文件的时候,我怎么知道其具体大小呢,那么文件岂不是不能够正确接收了?
    2010年3月8日 8:24

答案

全部回复

  • 你用WHILE(True)不断循环读取.然后判断是否读取完
    http://kb.cnblogs.com/a/1486487/
    努力+方法=成功
    2010年3月8日 8:51
  • 你好!
         你可以参考这个实例,希望对你有帮助:
                // Examples for CanRead, Read, and DataAvailable.
    
                // Check to see if this NetworkStream is readable.
                if(myNetworkStream.CanRead){
                    byte[] myReadBuffer = new byte[1024];
                    StringBuilder myCompleteMessage = new StringBuilder();
                    int numberOfBytesRead = 0;
    
                    // Incoming message may be larger than the buffer size.
                    do{
                         numberOfBytesRead = myNetworkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
    
                         myCompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead));
                                         
                    }
                    while(myNetworkStream.DataAvailable);
    
                    // Print out the received message to the console.
                    Console.WriteLine("You received the following message : " +
                                                 myCompleteMessage);
                }
                else{
                     Console.WriteLine("Sorry.  You cannot read from this NetworkStream.");
                }
    

    周雪峰
    2010年3月8日 9:03
    版主
  • 如果我发送的不足1024字节,只有10个字节,哪岂不是有很多空格产生,而且使得文件的空间大于了实际的大小!
    2010年3月8日 9:11
  • 看到那个 numberOfBytesRead 没?这个就是确切的字节数,不会有空格多出来的


    霸王
    • 已标记为答案 capfdbse 2010年3月8日 9:45
    2010年3月8日 9:33
  • 你好!
         你看这两行代码:numberOfBytesRead就是这次读取的字节数,第二行代码根据这个数来格式化字符串的,所以不用担心你提到的问题
    numberOfBytesRead = myNetworkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
    myCompleteMessage.AppendFormat("{0}" , Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead));

    周雪峰
    2010年3月8日 9:47
    版主