Java:如何判断.getInputStream()是否接收文本?

时间:2013-07-08 16:15:11

标签: java sockets methods jtextfield

我正在编写聊天工具。 JTextField读取文本,我从客户端套接字获取.getInputStream()。但现在我必须决定一个新字符是否是消息的一部分(发送到套接字的字符串)或新消息的第一个字符。

我最近的想法是弄清楚客户端套接字上的.getInputStream()方法是否在一瞬间接收文本。有没有找到这个的方法?

4 个答案:

答案 0 :(得分:1)

在服务器上创建套接字的输出流,并使用writeUTF()方法在套接字上打印字符串。多数民众赞成......

答案 1 :(得分:1)

您可以发送数据包而不是发送纯文本...发送消息字符串的大小(作为编码的整数),然后将消息作为文本发送。或者,正如subham所说,只需使用字符串编码功能一次发送整个字符串。那将为你做缓冲。您应该使用内置函数来确定这些边界,而不是自己这样做。

答案 2 :(得分:0)

试试这个

BufferedReader is = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = is.readLine()) != null)
  System.out.println(line);
}

答案 3 :(得分:0)

我认为您无法使您提出的方法可靠地运作。基本上,您无法可靠地区分网络流中“消息”的边界,因为网络拥塞等会使数据包到达时间失真,导致可能会传递多个(或部分)“消息”以响应{{1调用流。

如果您希望在协议中使用消息结构,则需要在数据流本身中使用某些内容来描述消息边界。例如,您可以保留一个数据值来表示“消息结束”,或者为每个消息添加字节数前缀。