2015-03-13 57 views
0

我有一个简单的客户端,我正在测试从我的android设备,我正在测试一个telnet服务器调用telehack.com。问题是当我从菜单项列表中请求某个选项时,数据发送但没有收到。 选项是advent(巨大的冒险)。我尝试了各种实现(套接字,套接字通道和选择),并在发送到来后仍然遇到同样的问题,没有收到数据,菜单中的其他选项正常工作。更糟糕的是,我已经从playstore下载了各种telnet客户端,他们似乎有同样的问题。 (除了似乎使用C++ NDK套接字库的Mobile Telnet)。android插座没有收到

同时在Windows上查看和Wireshare和telnet客户端显示数据被发送回来没有什么不寻常的。

public void run() { 
    mRun = true; 

    try { 
     Socket sc = new Socket(SERVER_IP, SERVER_PORT); 
     inBuffer = new DataInputStream(sc.getInputStream()); 
     outBuffer = new DataOutputStream(sc.getOutputStream()); 

     Log.e("TCP Client", "C: Connecting..."); 

     if (mConnectionListener != null) 
      mConnectionListener.connectionStatusChanged(true); 

     sc.setSoTimeout(5*60*1000);     //Socket timeout = 4 minutes 

     sc.setTcpNoDelay(true); 
     sc.setKeepAlive(true); 

     try { 


      while (mRun) { 


       int size = inBuffer.available(); 
       if (size > 0) 
       { 


        byte[] readBuf = new byte[size]; 
        inBuffer.read(readBuf); 
+0

你可能会多一点具体的关于你的问题,包括你所谈论的范围内的全部源代码(看起来像它的不完整)。 – gabriel 2015-03-13 12:19:59

+0

您可以尝试在Android模拟器上运行此操作,并通过主机上的数据包嗅探,或者通过可以嗅探的wifi路由器上的设备,或者通过您的开发机器的以太网连接的WiFi共享来嗅探。 – 2015-03-13 12:20:38

回答

0

available()方法可能会得到您想要的结果,但它不一定非要。一些流只是返回0。使用恒定的大小读缓冲区,而不是:

byte[] buffer = new byte[4096]; 

int bytesRead = 0; 
while ((bytesRead = in.read(buffer)) >= 0){ 
    // note that only the bytes 0 to bytesRead-1 are valid in buffer 
}