java socket输入流inputStream.read(byte[])方法一次读入多帧数据,也就是多帧数据连在一起

2024-12-01 09:23:03
推荐回答(1个)
回答1:

因为inputStream.read(byte)是尽可能的读byte[]大小的数据,当你的服务端发送数据速度迹亩大于客户端读取数据的速度时,就会出现客户端读到多帧连在一起的报文。而这些发送数据,读取数据的速度是未知的。所以我猜州稿们需要人为的来做一些调整。比如说每一帧作为一行写入Socket,穗孝客户端每次从socket读取一行。这样客户端每次都是读取一帧。

以上情况可以这样实现:在服务端使用PrintWriter

PrintWriter writer=new PrintWriter(socket.getOutputStream());
writer.println(data);

客户端可以使用BufferedReader

BufferedReader reader=new BufferedReader(new BufferedInputStream(socket.getInputStream()));
String s=reader.readLine();