通过socket完成zip文件的网络传输,但是传输过去会出现文件损坏。
接收端代码:
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Receive {
final static String name = "E:\\2.zip";//接收文件储存位置
final static int port = 9999;
final static int databig = 8192;
public static void main(String[] args){
File file = new File(name);
byte[] data = new byte[databig];
long big = 0;
long count = 0;
try {
ServerSocket server = new ServerSocket(port);
System.out.println("等待发送端连接");
Socket socket = server.accept();
System.out.println("连接成功");
file.createNewFile();
FileOutputStream out = new FileOutputStream(file);
BufferedInputStream in = new BufferedInputStream(socket.getInputStream(), databig);
DataInputStream in2 = new DataInputStream(socket.getInputStream());
//接收文件大小
big = in2.readLong();
System.out.println(big);
while(true)
{
in.read(data, 0, data.length);
out.write(data, 0, data.length);
System.out.println((count*1.0/big*1.0)*100);
count+=databig;
}
}
catch (Exception e) {
System.out.println(e.toString());
}
System.out.println("接收成功");
}
}
发送端代码:
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.Socket;
public class Send {
final static String name = "E:\\2.zip";
final static String ip = "19.168.43.01";
final static int port = 9999;
final static int filebig = 8192;
public static void main(String[] args) {
File file = new File(name);
long big = file.length();
System.out.printf("文件总大小(Byte): ");
System.out.println(big);
byte[] data = new byte[filebig];
long count = 0;
try {
Socket socket = new Socket(ip, port);
FileInputStream in = new FileInputStream(file);
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream(), filebig);
DataOutputStream out2 = new DataOutputStream(socket.getOutputStream());
//发送文件大小
out2.writeLong(big);
out2.flush();
while(in.read(data, 0, data.length) != -1)
{
System.out.printf("发送文件百分比:");
System.out.println((count*1.0/big*1.0)*100);
out.write(data, 0, data.length);
out.flush();
count+=filebig;
}
System.out.println("发送成功");
}
catch (Exception e) {
e.printStackTrace();
}
}
}
相关推荐
mfc socket编程实现聊天与文件传输(vs2010)
mfc socket编程实现聊天与文件传输(vs2010)
Qt局域网文件传输工具:大文件TCP传输与粘包处理实践
网络编程中,文件传输是一项基础需求,而基于TCP协议实现可靠的大文件传输更是工程实践中的常见挑战。TCP作为面向连接的流式协议,其数据边界与网络拥塞控制机制决定了开发者必须处理好粘包、半包、内存峰值等问题。Qt框架中的QTcpSocket与QTcpServer提供了完善的网络通信能力,结合QFile分块读取与信号槽异步机制,可以在不阻塞UI的前提下实现稳定高效的局域网文件互传。该方案广泛应用于固件分发、安装包传递、多媒体资源共享等场景,尤其适合数十GB级别的大文件传输。以Qt-FileTransfer工具为
C-S与P2P智能切换的文件传输实战:穿透NAT与防火墙
文件传输不仅是协议选择问题,更是网络环境适配问题。在真实网络中,公网IP稀缺、NAT类型多样、防火墙策略严苛,导致传统C-S模型连接成功率骤降。理解TCP连接建立原理、NAT映射机制与UDP保活逻辑,是构建高可用传输系统的基础。技术价值在于通过STUN探测识别网络拓扑、基于加权指标动态决策C-S或P2P路径,并以TCP打洞、UDP心跳和HTTP流式中继实现多级降级。典型应用场景包括远程协作工具、企业内网文件共享、弱网环境课件分发等。本文聚焦‘连接成功率’这一核心目标,提供可落地的NAT穿透与智能路径切换方案
socket传输zip文件
socket进行zip文件传输,在服务端将数据转换成excel文件,然后将文件压缩,减小传输数据量,然后在客户端接收数据,压缩成zip文件
python socket局域网聊天与文件传输.zip
python socket局域网聊天文件传输程序 ,界面用wxPython编写,实现多线程 ,跨平台,windows和linux下过行都可


Java SE
