2013-03-25 4 views
0

Я работаю над файлом sendig из настольного приложения в приложение Windows Phone с помощью сокета.получение большого файла с помощью Windows Phone socket

Я разработал приложение для настольных сокетов и приложение для Windows-телефона (сокет-клиент), оба работают хорошо с файлом менее 1 МБ, поэтому я могу передать файл размером менее 1 МБ на приложение Windows Phone из настольного приложения.

И теперь моя проблема заключается в отправке большого файла, приводящего к сбою приложения, я отлаживал приложение, но он будет висеть после некоторой итерации.

Пожалуйста, ознакомьтесь с нижеприведенным фрагментом кода для логики приема файлов в конце окна телефона.

Код:

public string Receive() 
    { 
     string response = "Operation Timeout"; 
     int bytestrn = 0; 
     int cnt = 0; 
     byte[] data = new byte[2048 * 5000]; 
     if (socketClient != null) 
     {     
      SocketAsyncEventArgs socketAsyncEventArgs = new SocketAsyncEventArgs(); 
      socketAsyncEventArgs.RemoteEndPoint = socketClient.RemoteEndPoint; 
      socketAsyncEventArgs.SetBuffer(new Byte[MAX_BUFFER_SIZE*20000], 0, MAX_BUFFER_SIZE*20000); 

      socketAsyncEventArgs.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object sender, SocketAsyncEventArgs e) 
      { 
       cnt++; 
       if (e.SocketError == SocketError.Success) 
       {      

        try 
        { 
         bytestrn += e.BytesTransferred; 
         if (e.BytesTransferred > 0) 
         { 

          if (bytestrn >= 2501829)         
          { 
           Buffer.BlockCopy(e.Buffer, 0, data, bytestrn - e.BytesTransferred, e.BytesTransferred);          
           int fileNameLen = BitConverter.ToInt32(data, 0); 
           string fileName = Encoding.UTF8.GetString(data, 4, fileNameLen); 
           IsoFileName = fileName; 
           IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication(); 

           using (BinaryWriter writeFile = new BinaryWriter(new IsolatedStorageFileStream(IsoFileName, FileMode.Create, FileAccess.Write, myIsolatedStorage))) 
           { 
            writeFile.Write(data, 4 + fileNameLen, bytestrn - 4 - fileNameLen);           
            writeFile.Close(); 
           } 
           clientDone.Set(); 
          } 
          else 
          { 
           if (cnt == 1) 
           { 
            Buffer.BlockCopy(e.Buffer, 0, data, 0, e.BytesTransferred); 
            //e.Buffer.CopyTo(data, 0); 
           } 
           else 
           { 
            Buffer.BlockCopy(e.Buffer, 0, data, bytestrn - e.BytesTransferred, e.BytesTransferred); 
            //e.Buffer.CopyTo(data, bytestrn - e.BytesTransferred); 
           } 

           clientDone.Reset(); 
           socketClient.ReceiveAsync(e); 
           clientDone.WaitOne(); 
          } 
          string test = "if"; 
         } 
         else 
         { 
          clientDone.Set(); 
          string test = "else"; 
         } 
         //clientDone.Set(); 
        } 
        catch (Exception exp) 
        { 
         string hi = "hi"; 
        }       
       } 
       else 
       { 
        response = e.SocketError.ToString(); 
       } 

       clientDone.Set(); 
      }); 

      clientDone.Reset(); 
      socketClient.ReceiveAsync(socketAsyncEventArgs); 
      clientDone.WaitOne(); 
     } 
     else 
     { 
      response = "Socket is not initialized"; 
     } // end of: if (socketClient != null) 

     return response; 
    } 

Отвод ответить скоро ...

Спасибо.

ответ

0

Отправляйте данные в патрон [4096] байт на передачу. Для этого вам необходимо наладить связь как с клиентом, так и с сервером.

Смежные вопросы