从套接字读取时检查转义字符(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!");
}
我不知道我如何能忽略的是,由于一吨,先生! – Jon 2013-05-08 18:16:48