package main;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.Socket;
public class FileTransfer {
private Socket socket;
private static final int MAX_BUFFER = 8192;
public FileTransfer(Socket socket) {
this.socket = socket;
}
public boolean sendFile(File file) {
boolean errorOnSave = false;
long length = file.length();
if (file.exists()) {
FileInputStream in = null;
DataOutputStream out = null;
try {
in = new FileInputStream(file);
out = new DataOutputStream(this.socket.getOutputStream());
out.writeLong(length);
out.flush();
byte buffer[] = new byte[MAX_BUFFER];
int read = 0;
int i=0;
while ((read = in.read(buffer)) != -1) {
System.out.println(i);
i++;
out.write(buffer, 0, read);
out.flush();
buffer = new byte[MAX_BUFFER];
}
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
return false;
} catch (IOException e) {
System.out.println("An error has occurred when try send file " + file.getName() + " \nSocket: "
+ socket.getInetAddress() + ":" + socket.getPort() + "\n\t" + e);
errorOnSave = true;
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
System.out.println("An error has occurred when closing the InputStream of the file "
+ file.getName() + "\n\t" + e.getMessage());
}
}
}
return !errorOnSave;
} else {
return false;
}
}
public boolean saveFile(File fileSave) {
RandomAccessFile file = null;
DataInputStream in = null;
boolean errorOnSave = false;
try {
file = new RandomAccessFile(fileSave, "rw");
file.getChannel().lock();
in = new DataInputStream(this.socket.getInputStream());
long fileSize = in.readLong();
byte buffer[] = new byte[MAX_BUFFER];
int read = 0;
while ((fileSize > 0) && ((read = in.read(buffer, 0, (int) Math.min(buffer.length, fileSize))) != -1)) {
file.write(buffer, 0, read);
fileSize -= read;
buffer = new byte[MAX_BUFFER];
}
} catch (FileNotFoundException e1) {
System.out.println(e1.getMessage());
return false;
} catch (IOException e) {
System.out.println("An error has occurred when saving the file\n\t" + e.getMessage());
errorOnSave = true;
} finally {
if (file != null) {
try {
file.close();
} catch (IOException e) {
System.out.println(
"An error occurred when closing the file " + fileSave.getName() + "\n\t" + e.getMessage());
errorOnSave = true;
}
}
if (errorOnSave) {
if (fileSave.exists()) {
fileSave.delete();
}
}
}
return !errorOnSave;
}
}
我的java项目有问题(它将文件从服务器发送到客户端......)几秒后它总是告诉我 "通过对等方重置连接:套接字写入错误"如果有人有安装请告诉我的代码有什么问题.....
答案 0 :(得分:-1)
我最近遇到过这个问题:试试这个
setBufferSize(1024*1024);
setKeepAlive(false);
同时检查您是否在同一WLAN连接(您的设备和服务器本身)
我希望这可以帮助你实现目标!