나는 프로그램을 실행하는 모든 클라이언트를 내 컴퓨터의 서버에 연결하는 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 앱입니다.
미리 감사드립니다.