2

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

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

4

4 回答 4

1

在服务器上创建套接字的输出流,并使用 writeUTF() 方法在套接字上打印字符串。就这样..

于 2013-07-08T16:18:59.100 回答
1

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

于 2013-07-08T16:22:35.800 回答
0

尝试这个

BufferedReader is = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = is.readLine()) != null)
  System.out.println(line);
}
于 2013-07-08T16:19:30.817 回答
0

我认为您无法使您提出的方法可靠地工作。基本上,您无法可靠地区分网络流中“消息”的边界,因为网络拥塞等会扭曲数据包到达时间,导致多个(或部分)“消息”可能被传递以响应read(...)对溪流。

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

于 2013-07-08T16:21:52.813 回答