2014-04-08 2 views
1

나는 프로그램을 실행하는 모든 클라이언트를 내 컴퓨터의 서버에 연결하는 C#을 사용하여 LAN 채팅 메시지 응용 프로그램을 만들었습니다.C# to Android chat client

이제이 응용 프로그램을 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] 13.455MB로 힙 재구성 4,194,308 바이트 할당 '

'8,388,612 바이트 할당 21.444MB 내지 [dalvikvm 힙] 성장 힙 (파편 경우) serverStream '

및 배선은 "최종 테스트"는 따라서 라인 도시되지 않는다.' 읽기 (inStream, 0, buffSize); ' 앱이 다운되고 있습니다. 나는 .Flush()와 .Close()를 사용하려고 노력했지만 아무 것도하지 않았습니다.

내 코드의 전송 부분은 다른 클라이언트가 메시지를받을 수 있으므로 'serverSocket.Write()'를 사용하여 완벽하게 실행되므로 서버에서 데이터를 읽는 것이 앱을 중단시키는 이유는 무엇입니까?

P.S 이것은 자바로 처음부터 시도하는 것보다 더 편안했던 언어를 사용하고 싶었던 첫 번째 Android 앱입니다.

미리 감사드립니다.

답변

1

메시지를 보내려고 할 때 메모리를 너무 많이 할당했기 때문에이 오류가 발생했음을 알았습니다.

간단한은

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

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

변경