可以在传输文件之前首先传输文件的长度
例如以下代码 客户端建立一次连接,首先发送了一个字符串,然后发送一个图片。如果直接发送会出现边界问题导致乱码。
可以先发送 message.getBytes().length 再发送message自身。
socket = new Socket(serverIP, port);
//4.发送消息
os = socket.getOutputStream();
String message = "连接成功";
os.write(message.getBytes().length);
os.write(message.getBytes());
//上传文件
fis = new FileInputStream(new File("net/beautiful.jpg"));
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
服务器端
首先接收一个len表示接下来要接收的长度,然后就可以用is.read(buffer, 0, len)来接收客户端传来的这个字符串。
然后再接收图片就不会有乱码了
socket = serverSocket.accept();
//3.读取信息
is = socket.getInputStream();
//4.管道流!
baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
len = is.read();
is.read(buffer, 0, len);
baos.write(buffer);
System.out.println(baos.toString());
//接收文件
fos = new FileOutputStream(new File("net/receive.jpg"));
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}