2015-04-13 1 views
1

У меня возникла эта ошибка, когда я пытаюсь загрузить что-то в MemoryStream. Я пытаюсь отправить изображение (в потоке байтов) через сеть через сервер. Но каждый раз, когда я пытаюсь отправить его, он говорит:Поток был достигнут до завершения обработки

Окончание потока было достигнуто до завершения обработки.

Строка с ошибкой помечается в коде ниже

namespace Model_Library 
{ 
    [Serializable] 
    public class Package 
    { 
     public List<object> DATA; 
     public int ID; 
     public PackageType packetType; 

     public Package(PackageType u_type, int u_ID) 
     { 
      DATA = new List<object>(); 
      this.ID = u_ID; 
      this.packetType = u_type; 
     } 

     public Package(byte[] packetBytes) 
     { 
      using (MemoryStream ms = new MemoryStream(packetBytes)) 
      { 
       BinaryFormatter bf = new BinaryFormatter(); 
       Package p = (Package)bf.Deserialize(ms); //Here is the error 
       ID = p.ID; 
       DATA = p.DATA; 
       packetType = p.packetType; 
      } 
     } 

     public byte[] toBytes() 
     { 
      BinaryFormatter bf = new BinaryFormatter(); 
      MemoryStream ms = new MemoryStream(); 
      bf.Serialize(ms, this); 
      byte[] bytes = ms.ToArray(); 
      ms.Close(); 
      return bytes; 
     } 
    } 

    public enum PackageType 
    { 
     connect, 
     login, 
     registration, 
     friends, 
     message, 
     message_confirmation, 
     load_history, 
     search_friends, 
     add_friend 
    } 
} 
+0

Попробуйте установить положение потока в начало потока – reggaeguitar

+0

Я уже пробовал «ms.Position = 0 ;» но у меня такая же ошибка – Tiremo

+0

ошибок нет с вашим кодом с простым объектом? – Ewan

ответ

0

Убедитесь, что все данные были получены по сети, вы не показать его здесь, но вы используете NetworkStream .DataAvailable, тогда прочитайте этот ответ, как описано в некоторых подробностях о том, как управлять чтением данных из сети. TcpClient.GetStream().DataAvailable returns false, but stream has more data