0

重複の可能性:
java.net.SocketException: Connection reset の原因は何ですか?

public void sendJobs(String hostname, int port, String username, String password, String folderName, Collection<File> files) throws Exception {
        FtpClient ftp = new FtpClient(hostname, port);
        ftp.login(username, password);
        ftp.binary();
        //ftp.cd("FTP_Hiring"); // this is for testing in Accel FTP. comment for other FTP
        if(folderName != "") {
              ftp.cd(folderName);
        }

        try {           
            for(File file : files) {
                FileInputStream fos = new FileInputStream(file);
                TelnetOutputStream tos = (TelnetOutputStream) ftp.put(file.getName());
                try {
                    //ftp.cd(file.getName().substring(0, file.getName().lastIndexOf(".")));
                    DataOutputStream dos = new DataOutputStream(tos);
                    byte[] buffer = new byte[1024 * 1024];
                    for (int length; (length = fos.read(buffer)) > 0;) {
                        dos.write(buffer, 0, length);
                    }

                    System.out.println("success");
                    tos.flush();
                    tos.close();
                    fos.close();    
                    ftp.cdUp();
                } catch(Exception e) {
                    hsLogger.error(e);
                    e.printStackTrace();
                } finally {
                    tos.close();
                    fos.close();    
                }
            }
        } catch(Exception e) {
            hsLogger.error(e);
            e.printStackTrace();
        }       
    }

上記のコードを指定しました。スケジューラで実行します。しかし、ラインで

TelnetOutputStream tos = (TelnetOutputStream) ftp.put(file.getName());次の例外が発生します

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:168)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
    at sun.net.TransferProtocolClient.readServerResponse(TransferProtocolClient.java:49)
    at sun.net.ftp.FtpClient.readReply(FtpClient.java:217)
    at sun.net.ftp.FtpClient.issueCommand(FtpClient.java:193)
    at sun.net.ftp.FtpClient.openDataConnection(FtpClient.java:383)
    at sun.net.ftp.FtpClient.put(FtpClient.java:594)
    at com.hiringsteps.ats.util.net.service.impl.JobXMLManagerService.sendJobs(JobXMLManagerService.java:1883)
    at com.hiringsteps.ats.util.net.service.impl.JobXMLManagerService.postJobs(JobXMLManagerService.java:273)
    at com.hiringsteps.ats.job.facade.impl.JobFacade$2.jobPosting(JobFacade.java:2031)
    at com.hiringsteps.ats.job.facade.impl.JobFacade$2.run(JobFacade.java:1935)
    at com.hiringsteps.ats.util.scheduler.service.impl.Scheduler$SchedulerTimerTask.run(Scheduler.java:20)
    at java.util.TimerThread.mainLoop(Timer.java:512)
    at java.util.TimerThread.run(Timer.java:462)
4

2 に答える 2

1

この例外にはいくつかの原因がありますが、最も一般的なのは、ピアによって既に閉じられている接続に書き込みを行ったため、ピアが TCP RST セグメント (リセット) を送信したことです。つまり、アプリケーション プロトコル エラーです。

于 2013-01-29T05:26:27.240 に答える
1

この例外は、ネットワークの基礎となる層、つまり TCP 層でエラーが発生していることを意味している可能性があります。

TCP パケットがサーバーから ACK 信号を受け取っていません。

これには、 Wiresharkなどのネットワーク パケット分析ツールを使用して、ネットワーク パケットをさらに分析する必要があります。

また

再試行メカニズムの実装を試みます (ただし、ネットワーク層から根本原因を見つけることをお勧めします)

もう1つ観察すると、エラーが読み取られConnection Reset、そうではないconnecton reset by peerため、クライアント側でエラーが発生したと思われます。

于 2013-01-29T05:17:49.513 に答える