简体   繁体   English

Java Server Android客户端Wifi发送文件,套接字错误

[英]Java Server Android client Wifi sending file, socket error

I have some problem with sending file from server (Desktop APP) to client (Android).... 我从服务器(桌面APP)向客户端(Android)发送文件时遇到一些问题。...

Before send file, server send meta data like size of file, name etc..... 在发送文件之前,服务器发送元数据,例如文件大小,名称等。

Server side send method: 服务器端发送方法:

private void sendPdfData(OutputStream os, File file) throws IOException {

    os.flush();
    FileInputStream fis = new FileInputStream(file);
    byte[] buffor = new byte[1024];
    long count = 0L;
    long size = file.length();
    int current = 0;   

    while (count < size) {  
        current = fis.read(buffor, 0, buffor.length);
        os.write(buffor, 0, current);
        count += current;
    }

    fis.close();
    os.flush();
}

Client side receive method: 客户端接收方法:

@Override
protected String doInBackground(Void... params) {

    String pathToPdf = "";

    if (pdf.getLength() > 0) {

        InputStream is;

        try {
            byte b = 0;
            clientSocket.getOutputStream().write(b);
            is = clientSocket.getInputStream();
            pathToPdf = pathToExternalStorageFolder+pdf.getMeta().getName();
            pathToPdf = pathToPdf.replace(".\\", "/");
            pathToPdf = pathToPdf.replace("\\", "/");
            int size = pdf.getLength();
            byte[] buffor = new byte[1024];
            int current = 0;
            int count = 0;

            if (pdf.getMeta() != null) {
                FileOutputStream fos = new FileOutputStream(pathToPdf);

                while (count < size) {
                    current = is.read(buffor, 0, buffor.length);
                    fos.write(buffor, 0, current);
                    count += current;
                }
                fos.close();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }    
    return pathToPdf;
}

Some random errors when sending file: 发送文件时出现一些随机错误:

java.net.SocketException: Software caused connection abort: socket write error
java.net.SocketException: Connection reset by peer: socket write error

File size: 2317679
Sended: 44032

UPDATE 08.09.2013 更新08.09.2013

I create desktop client app to check server app. 我创建桌面客户端应用程序以检查服务器应用程序。 When I run server and client in NetBeans everything runs great, I use interface address (not lopback). 当我在NetBeans中运行服务器和客户端时,一切运行良好,我使用接口地址(而不是后备地址)。 When I run client from jar I have issue: file list is null but on server side is not null and is not empty, when connect from android i get files list wtfigo - magic. 当我从jar运行客户端时,我遇到了一个问题:文件列表为空,但在服务器端不为空,也不为空,当从android连接时,我得到文件列表wtfigo-魔术。

"This error can occur when the local network system aborts a connection, such as when WinSock closes an established connection after data retransmission fails (receiver never acknowledges data sent on a datastream socket).". “当本地网络系统中止连接时,例如在数据重传失败后WinSock关闭已建立的连接(接收方从不确认在数据流套接字上发送的数据)时,可能会发生此错误。”。

http://msdn.microsoft.com/en-us/library/ms832256.aspx http://msdn.microsoft.com/zh-CN/library/ms832256.aspx

https://forums.oracle.com/thread/1691330 https://forums.oracle.com/thread/1691330

Socket.close() in one Thread while another is reading from or writing to that socket, results in an Exception being thrown since the socket was closed. 一个线程中的Socket.close() ,而另一个线程正在对该套接字进行读取或写入时,由于套接字已关闭,因此将引发Exception。

try adding autoReconnect=true to the jdbc connection string 尝试将autoReconnect=true添加到jdbc连接字符串

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM