连接由peer重置:套接字写错误(android / server)

时间:2016-07-10 17:47:02

标签: java android sockets networking file-sharing

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项目有问题(它将文件从服务器发送到客户端......)几秒后它总是告诉我 "通过对等方重置连接:套接字写入错误"如果有人有安装请告诉我的代码有什么问题.....

1 个答案:

答案 0 :(得分:-1)

我最近遇到过这个问题:试试这个

setBufferSize(1024*1024);
setKeepAlive(false);

同时检查您是否在同一WLAN连接(您的设备和服务器本身)

我希望这可以帮助你实现目标!