2014-04-08 96 views
1

我一直在使用連接誰運行程序到我的計算機上的服務器的所有客戶端C#創建一個局域網聊天消息應用程序。C#到Android聊天客戶端

我現在想這個應用程序通過Xamarin Studio的Android設備的工作轉換。

當測試這一點,該裝置正確地連接到服務器,因爲它可以發送消息(稱該設備已登錄),然後廣播到其他客戶端。

但是,一旦應用程序發送此消息,程序將立即關閉。

在我使用的代碼(這是另一個線程上運行)聊天客戶端的桌面版本:

NetworkStream serverStream = default(NetworkStream); 
private void getMessage() 
    { 
     while (this.keepOpen) 
     { 
      Console.WriteLine("getMessage"); 
      serverStream = clientSocket.GetStream(); 
      int buffSize = 0; 
      byte[] inStream = new byte[clientSocket.ReceiveBufferSize]; 
      buffSize = clientSocket.ReceiveBufferSize; 
      try 
      { 
       Console.WriteLine("Read stream"); 
       serverStream.Read(inStream, 0, buffSize); 
       Console.WriteLine ("Final test"); 
      } 
      catch 
      { 
       Console.WriteLine("failed to read stream"); 
      } 


      string returndata = Encoding.ASCII.GetString(inStream); 
      readData = "" + returndata; 
      message(); 
     } 
    } 

這工作第一次它被稱爲行「最終測試」顯示。然而,在此之後,當方法再次到達這個階段(因爲它處於永無止境的循環中),我收到一條錯誤消息:

'[dalvikvm-heap]將堆(frag case)增加到13.455MB 4194308字節分配「

‘[dalvikvm堆]成長堆(FRAG情況下),以21.444MB爲8388612字節分配’

而線‘最終測試’並不因此所示的線」 serverStream。讀(inStream,0,buffSize);'正在崩潰應用程序。我試圖使用.Flush()和.Close(),但是這些都不起作用。

我的代碼發送部分運行完全使用「serverSocket.Write()」其他客戶端可以接收消息,爲什麼會從服務器崩潰的應用程序讀取數據?

P.S這是我的第一個Android應用程序,所以我想用我的語言更舒服不是從頭開始嘗試用java。

在此先感謝。

回答

1

意識到這個錯誤是因爲我試圖發送一個messag時分配太多的內存。

簡單改變

byte[] inStream = new byte[clientSocket.ReceiveBufferSize]; 
buffSize = clientSocket.ReceiveBufferSize; 

byte[] inStream = new byte[4096]; 
buffSize = 4096;