我正在编程聊天工具。JTextField 读取文本,我通过 .getInputStream() 从客户端套接字获取。但是现在我必须决定一个新字符是消息的一部分(发送到套接字的字符串)还是新消息的第一个字符。
我最近的想法是弄清楚我在客户端套接字上的 .getInputStream() 方法是否在一瞬间接收到文本。有没有办法找出来?
我正在编程聊天工具。JTextField 读取文本,我通过 .getInputStream() 从客户端套接字获取。但是现在我必须决定一个新字符是消息的一部分(发送到套接字的字符串)还是新消息的第一个字符。
我最近的想法是弄清楚我在客户端套接字上的 .getInputStream() 方法是否在一瞬间接收到文本。有没有办法找出来?
在服务器上创建套接字的输出流,并使用 writeUTF() 方法在套接字上打印字符串。就这样..
您可以发送一个数据包,而不是发送纯文本...发送消息字符串的大小(作为编码整数),然后发送消息作为文本。或者,正如 subham 所说,只需使用字符串编码函数一次发送整个字符串。这将为您进行缓冲。您应该使用内置函数来确定这些边界,而不是自己这样做。
尝试这个
BufferedReader is = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = is.readLine()) != null)
System.out.println(line);
}
我认为您无法使您提出的方法可靠地工作。基本上,您无法可靠地区分网络流中“消息”的边界,因为网络拥塞等会扭曲数据包到达时间,导致多个(或部分)“消息”可能被传递以响应read(...)
对溪流。
如果您想要协议的消息结构,则需要使用数据流本身中的某些内容来描绘消息边界。例如,您可以保留一个数据值来表示“消息结束”,或者在每条消息前面加上一个字节数。