tcp一次连接多次传输/上传如何确定边界?

可以在传输文件之前首先传输文件的长度

例如以下代码 客户端建立一次连接,首先发送了一个字符串,然后发送一个图片。如果直接发送会出现边界问题导致乱码。
可以先发送 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);
                }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值