2012-03-06 44 views
1

我无法获得Android(客户端)和c#应用(服务器)之间的套接字连接以正确读取响应。插槽纯文本响应中断

我已经成功地从android发送一条消息到C#,我正在阅读它的罚款。但是,当我尝试向Android发送确认信息时,我不知道处理这种情况的正确方法,而且我不得不在一些教程不清楚的地方做出一些假设。我am在android中获取响应,但它不是100%正确的。我通过Wireshark验证过c#发送了我想要发送的内容,并且文本看起来很好,直到它到达android。

C#: 
    public void SendClientMessage() 
    { 
     NetworkStream clientStream = _Client.GetStream(); 
     ASCIIEncoding encoder = new ASCIIEncoding(); 
     byte[] buffer = encoder.GetBytes("Hello Client!"); //Static test message 

     clientStream.Write(buffer, 0, buffer.Length); 
     clientStream.Flush(); 
    } 

...

Android: 
    private void listenResponse() 
    { 
     Log.i(TAG, "listenRespose() Listening..."); 
     try 
     { 
      InputStream is = socket.getInputStream(); 
      BufferedInputStream bis = new BufferedInputStream(is); 
      byte[] buffer = new byte[1024]; 
      int countBytesRead = bis.read(buffer, 0, 8); 
      String response = new String(buffer); 
      Log.i(TAG, "listenResponse() Heard: " + response); 
     } 
     catch (IOException e) 
     { 
      Log.e(TAG, "listenResponse() IOException", e); 
      e.printStackTrace(); 
     } 
     Log.i(TAG, "listenResponse() Done Listening."); 
    } 

...

WireShark shows: 
    Hello Client! 

...

Android LogCat shows: 
    listenRespose() Listening... 
    listenResponse() Heard: Hello Cl??????????????????????????? [... ?s continue for a long time] 
    listenResponse() Done Listening. 

如果不是我初始化这样我的字符串:

String response = new String(buffer, 0, countBytesRead); 

至少我没有得到所有的问号,但我仍然没有得到我应该得到的完整字符串。我初始化我的字节[]错误,还是有不同的方式来做到这一点,更适合纯文本?

回答

2

你只读8个字节这里

int countBytesRead = bis.read(buffer, 0, 8); 
//      max bytes to read^

而是阅读所有您可以:

int countBytesRead = bis.read(buffer, 0, Buffer.length); 

问号你看到的是因为你的缓冲区未初始化。

+0

是的!谢谢!我讨厌这样的事情,我只关注字节数组上的1024维度大小。卫生署!非常感谢先生 – maxx233 2012-03-06 10:03:18