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

问题描述 投票:0回答:1

好的,我正在设计一个 Android MUD 客户端作为我学校项目的一部分。然而,我在实施 ANSI 颜色解析时遇到了问题。我逐字节读入数据。我试过将字符“hex”设置为“”、“27”和“0x1B”,但我似乎永远无法让它检测到转义字符。你们有没有发现我检查的错误?此外,行“char check = String.valueOf(j).charAt(0);”是临时的,我最初试图检查字符变量“hex”与字节“j”的对比。是否有更好的方法来检查字符?

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

                }   
android sockets character ansi-escape
1个回答
1
投票

好吧,您正在检查读取的字节数而不是每个单独的字节。

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

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

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

for (int n=0; n < j; n++)
{
    if (arrayOfByte[n]  == hex) Log.d("Console", "Yo, daddio!");
}
© www.soinside.com 2019 - 2024. All rights reserved.