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

时间:2013-05-07 21:11:20

标签: android sockets character ansi

好的,所以我正在设计一个Android MUD客户端作为我学校项目的一部分。但是,我在实现ANSI颜色解析时遇到了问题。我逐字节地读取数据。我已经尝试将字符“hex”设置为'\ 033','27'和'0x1B',但我似乎永远无法检测转义字符。你检查它有什么问题吗?另外,行“char check = String.valueOf(j).charAt(0);”是暂时的,我原本试图检查字符“j”的字符变量“hex”。是否有更好的方法来检查角色?

                    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;
                    }

                }   

1 个答案:

答案 0 :(得分:1)

嗯,你正在检查读取的字节数而不是每个字节。

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

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

因此,您需要执行以下操作:

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