Java Socket跨网传输限速但局域网不限速问题排查
Java Socket ObjectStream 跨网传输速度异常受限问题
我实现了一个基于Java Socket的基础文件传输功能,测试发现:
- 在局域网(1Gbps连接)中传输速度可达约110MB/s,已达网络上限;
- 切换至互联网连接后,速度被限制在3-3.5MB/s,但其他应用(如Google Drive Windows客户端)无此限制,传输速度能超过40MB/s。
测试截图说明:
- 局域网传输速度截图:任务管理器显示速度约110MB/s
- 互联网传输速度截图:任务管理器显示速度3-3.5MB/s
- Google Drive传输速度截图:任务管理器显示速度超40MB/s
服务端代码
ObjectInputStream dataIn = new ObjectInputStream(socket.getInputStream()); ObjectOutputStream dataOut = new ObjectOutputStream(socket.getOutputStream()); File file = new File( System.getProperty("user.dir") + "\\" + ThreadLocalRandom.current().nextInt(0, 5000000) + ".dat"); while (file.exists()) { file = new File(System.getProperty("user.dir") + "\\" + ThreadLocalRandom.current().nextInt(0, 5000000) + ".dat"); } BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); Object auxKeepReading = dataIn.readObject(); if (auxKeepReading instanceof Boolean) { while ((boolean) auxKeepReading) { Object auxSize = dataIn.readObject(); if (!(auxSize instanceof Integer)) { break; } Object auxBuffer = dataIn.readObject(); if (!(auxBuffer instanceof byte[])) { break; } bos.write((byte[]) auxBuffer, 0, (int) auxSize); auxKeepReading = dataIn.readObject(); if (!(auxKeepReading instanceof Boolean)) { break; } } } bos.close(); dataIn.close(); dataOut.close(); socket.close();
客户端代码
Socket socket = new Socket("IP", 40001); ObjectOutputStream dataOut = new ObjectOutputStream(socket.getOutputStream()); ObjectInputStream dataIn = new ObjectInputStream(socket.getInputStream()); BufferedInputStream is = new BufferedInputStream( new FileInputStream(new File(System.getProperty("user.dir") + "\\Test.dat"))); byte[] buffer = new byte[8192]; int sizeRead = 0; while ((sizeRead = is.read(buffer, 0, 8192)) >= 0) { dataOut.writeObject(true); dataOut.writeObject(sizeRead); dataOut.writeObject(Arrays.copyOf(buffer, sizeRead)); dataOut.flush(); buffer = new byte[8192]; } is.close(); dataOut.writeObject(false); dataOut.flush(); dataIn.close(); socket.close();
因业务需求需传输其他对象,故使用ObjectStream。最初排除ISP限制可能(其他应用无此问题),请问该传输限速的原因是什么?
补充测试:使用qBittorrent创建种子跨网下载,速度同样仅不足3MB/s,现怀疑ISP对部分上传类型限速,将联系ISP确认。
内容的提问来源于stack exchange,提问作者user21967510
相关产品推荐
相关产品推荐

