从套接字读取时检查转义字符(0x1B,\ 033)

问题描述:

好的,所以我正在设计Android MUD客户端作为我学校项目的一部分。然而,在执行ANSI颜色解析时,我遇到了一个问题。我以字节为单位读取数据。我已经尝试将字符“hex”设置为'\ 033','27'和'0x1B',但我似乎无法使其检测到转义字符。有没有什么你可以看到我的检查错误?此外,行“char check = String.valueOf(j).charAt(0);”是临时的,我最初试图检查字符变量“十六进制”字节“j”。有没有更好的方法来检查角色?从套接字读取时检查转义字符(0x1B, 033)

    while(isConnected) { 

        int j = 0; 

        try { 
          int i = arrayOfByte.length; 
          j = streamInput.read(arrayOfByte, 0, i); 

          char check = String.valueOf(j).charAt(0); 

          Log.d("Console","Char is - " + check); 
          if (j == -1) 
          { 

           Log.d("Console","j = -1"); 
           throw new Exception("Error while reading socket."); 
          } else if (j == 0) { 

           Log.d("Console","Continuing"); 
           continue; 
          } else if (check == hex) { 
           Log.d("Console","Yo, daddio!"); 
          } else { 

           final String strData = new String(arrayOfByte, 0, j).replace("\r", ""); 


           runOnUiThread(new Runnable() { 
            public void run() { 


             textContent.append(strData); 
             scrollToBottom(); 

            } 
           }); 

          } 
        } catch (Exception e) { 

         Handler handlerException = GameWindow.this.mHandler; 
         String strException = e.getMessage(); 
         final String strMessage = "Error while receiving from server:\r\nConnection terminated"; 

         Runnable rExceptionThread = new Runnable() 
         { 
          public void run() 
          { 
           Toast.makeText(context, strMessage, 3000).show(); 
          } 
         }; 

         handlerException.post(rExceptionThread); 

         if(strException.indexOf("reset") != -1 || strException.indexOf("rejected") != -1) 
         { 
          isConnected = false; 
          try 
          { 
           connectionSocket.close(); 
          } 
          catch (IOException e1) 
          { 
           e1.printStackTrace(); 
          } 

         } 

         isConnected = false; 
        } 

       } 

那么,你正在检查读取的字节数,而不是每个单独的字节。

j = streamInput.read(arrayOfByte, 0, i); 

返回读取并放入arrayOfByte这些字节的字节数。

因此,你需要做到以下几点:

for (int n=0; n < j; n++) 
{ 
    if (arrayOfByte[n] == hex) Log.d("Console", "Yo, daddio!"); 
} 
+0

我不知道我如何能忽略的是,由于一吨,先生! – Jon 2013-05-08 18:16:48