2014-04-08 140 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;