用于非面向行的应用程序级协议的Java服务器程序

时间:2011-12-04 13:06:46

标签: java network-programming

我正在用Java编写服务器应用程序。要从套接字读取我有:

line = in.readLine();

其中inBufferReader实例,因此我可以从套接字流中读取字符串。

如何改变这一点以将我的程序用于非面向行的协议,其中每个应用程序级消息的结尾被特定的字符串终止,例如, %,而不是换行符?

2 个答案:

答案 0 :(得分:5)

在循环中使用read()方法,直到字符为%。在每个字符处,将其附加到StringBuilder

StringBuilder builder = new StringBuilder();
for (int i = reader.read(); i >= 0; i = reader.read()) {
    char c = (char) i;
    if (c == '%') {
        break; // or consume the current builder, and recreate a new one
    }
    else {
        builder.append(c);
    }
}

答案 1 :(得分:1)

虽然我自己实际上没有使用过这个,但我记得很久以前在文档中看过这个类,看起来它确实可以做你想做的事情,即使它的功能可能有点过分仅仅是分离输入。

http://docs.oracle.com/javase/6/docs/api/java/io/StreamTokenizer.html

这样您就可以直接将BufferedReader包裹在StreamTokenizer之后,然后将其设置为将%字符识别为空格字符,并将其他每个字符识别为普通/字母字符。然后,您可以在标记生成器上重复调用nextToken,当它返回TT_WORD时,您可以通过sval属性获取令牌。

最后,根据JB Nizet的回复,你可能更容易实现这一点。