日期:2014-05-20  浏览次数:20743 次

JAVA求助: connection reset by peer:socket write error
是这样的 我的client端程序如下(节选)
FileInputStream fis = new FileInputStream(fileName);
  int data;
  while ( -1 != ( data = fis.read( ) ) )
  {
  os.write( data );
  }  
   
  System.out.println( "send file success!!" );
   
在client端设备上执行后 只从文件发送了一个字节 发送到server端后,程序便出错退出了(server收到了此字节)
出错在: os.write( data ); 这一行 好象是超时后报错 
printStackTrace()错误提示如下 :
java.net:SocketException: connection reset by peer :socket write error
......................
......................

奇怪的是 :
  程序退出后 网络居然不通了??!! 需要拔下网线 再插上网线等一会网络才能ping通 真郁闷呀!!!

各位前辈 多指教 谁遇到过这种问题  
主要两个问题
1:程序怎么会执行不下去 只发了一个字节就connection reset by peer :socket write error中断??
2:网络居然不通了??!!


------解决方案--------------------
异常很常见 但是不是说一个异常对应一个问题(或者说是对应一个问题 但是这个问题的发生原因有很多)
描述运行环境之前最好先让读者看到这个程序可能会出现问题的地方(如果你自己不能确认的话 则贴下代码比较好些)

这类问题自己调试的方式是 可以先拿一个能跑的通的例子与自己基于某个业务开发的功能做比较 如果实在看不出什么区别 再拿出来提问


下面发一些代码 这些代码并不是我开发的 却是我修改的 当时的发帖者因为找不出原因至少贴了的代码

Java code

package net.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTester implements Runnable {

    @Override
    public void run() {
        ServerSocket server = null;
        try {
            server = new ServerSocket(5000);
            
            BufferedReader in = null;
            BufferedWriter out = null;
            while (true) {
                Socket socket = server.accept();
                
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                
                while (true) {
                    out.write("hello to client\r\n");
                    out.write("i am server\r\n");
                    out.write("bye\r\n");
                    out.flush();
                    if (in.readLine().trim().equals("exit")) {
                        break;
                    }
                }
                socket.close();
                System.err.println("第一次请求结束...按照你这个代码同时只能接受一个请求...");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (server != null) {
                try {
                    server.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

------解决方案--------------------
Java code

package net.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketTester implements Runnable {

    @Override
    public void run() {
        Socket socket = null;

        BufferedReader in = null;
        BufferedWriter out = null;
        try {
            socket = new Socket("localhost", 5000);

            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

            String line = null;
            while ((line = in.readLine()) != null) {
                if (line.trim().equals("bye")) {
                    break;
                } else {
                    System.out.println(line);
                }
            }
            out.write("exit\r\n");
            out.flush();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}