烦扰的问题,在用Socket时,老是出现Connection reset异常问题.不晓得,如何修改程序才好。请高手们指教一下.代码如下:
服务端:
import java.net.*;
import java.io.*;
public class MulServer {
  public int listenPort = 3000;
  public MulServer() {
  }public void acceptConnections() {
try {
ServerSocket server = new ServerSocket(listenPort, 5);
Socket incomingConnection = null;
while (true) {
incomingConnection = server.accept();
handleConnection(incomingConnection);
}
} catch (BindException e) {
System.out.println("Unable to bind to port " + listenPort);
} catch (IOException e) {
System.out.println("Unable to instantiate a ServerSocket on port: " + listenPort);
}
}
public void handleConnection(Socket connectionToHandle) {
  new Thread(new ConnectionHandler(connectionToHandle)).start();
}
public static void main(String[] args) {
  MulServer server = new MulServer();
  server.acceptConnections();
}class ConnectionHandler implements Runnable{
Socket socketToHandle;
public ConnectionHandler(Socket aSocketToHandle) {
socketToHandle = aSocketToHandle;
}
public void run() {
  try {
  PrintWriter streamWriter = new PrintWriter(socketToHandle.getOutputStream());
  BufferedReader streamReader =
  new BufferedReader(new InputStreamReader(socketToHandle.getInputStream()));
  String fileToRead = streamReader.readLine();
  BufferedReader fileReader = new BufferedReader(new FileReader(fileToRead));
  String line = null;
  while ((line = fileReader.readLine()) != null)
  streamWriter.println(line);
  fileReader.close();
  streamWriter.close();
  streamReader.close();
  } catch (Exception e) {
  System.out.println("Error handling a client: " + e);
  }
  }
}
}客户端
import java.net.*;
import java.io.*;
public class Client extends Thread {
  Socket so;
  public Client() throws Exception{
    so = new Socket("127.0.0.1",3000);
  }
  public void sendMsg(String str) throws Exception{
    PrintWriter pw = new PrintWriter(so.getOutputStream());
    pw.print(str);
  }
  public void run(){
    try{
      this.sendMsg("tests.test");
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  public static void main(String arg[]){
    try{
      Client[] c = new Client[5];
      for (int i=0; i<5; i++){
        c[i] = new Client();
        c[i].start();
      }
    }catch(Exception e){
      e.printStackTrace();
    }
  }}

解决方案 »

  1.   

    服务端没有发送数据.你看哈有streamWriter.write()没有?没有啥!!!!
      

  2.   

    pw.print(str);
    改成 pw.println(str);
      

  3.   

    是啊,我是新手,拿了一段代码,自己修改点东西,然后老是报connection reset
      

  4.   

    我把上面的代码修改成Socket长连接,怎么又开始报那个错了。郁闷!!
     还是先只实现发送消息,而不返回消息的功能。
    服务端:
    import java.net.*;
    import java.io.*;public class Server {
      public ServerSocket ss;
      int pools;
      public Server(int port , int pools) throws Exception{
        ss= new ServerSocket(port, pools);
        this.pools = pools;
        System.out.println(port+" "+pools);
      }
      public void acceptConnet() throws Exception{
        while(true){
          Socket s = ss.accept();
          if(s!=null){
            System.out.println("have set thread " + pools);
            (new ServerThread(s, pools)).start();
            --pools;
          }
        }
      }  public static void main(String arg[]){
        try{
          Server server = new Server(3000, 5);
          server.acceptConnet();
        }catch(Exception e){
          e.printStackTrace();
        }
      } class ServerThread extends Thread{
      private Socket so;
      private int numb;
      public ServerThread(Socket so, int num) {
        this.so=so;
        numb = num;
      }  public void setSo(Socket so){
        this.so=so;
      }
      public void run(){
        try{
          BufferedReader br = new BufferedReader(new InputStreamReader(so.
              getInputStream()));
          PrintWriter pw = new PrintWriter(so.getOutputStream());
          String line;
          while (true) {
            if((line=br.readLine())!=null){
              System.out.println("Thread "+numb+": "+line);
            }
          }
        }catch(Exception e){
          e.printStackTrace();
        }
      }
    }}
    客户端和上面差不多,我把pw.print(str)改成了pw.println(str)  pw.flush();
    import java.net.*;
    import java.io.*;
    public class Client extends Thread {
      Socket so;
      public Client() throws Exception{
        so = new Socket("127.0.0.1",3000);
      }
      public void sendMsg(String str) throws Exception{
        PrintWriter pw = new PrintWriter(so.getOutputStream());
        pw.println(str);
        pw.flush();
      }
      public void run(){
        try{
          this.sendMsg("tests.txt");
        }catch(Exception e){
          e.printStackTrace();
        }
      }
      public static void main(String arg[]){
        try{
          Client[] c = new Client[5];
          for (int i=0; i<5; i++){
            c[i] = new Client();
            c[i].start();
          }
        }catch(Exception e){
          e.printStackTrace();
        }
      }
    }
    你看又报错了。
      

  5.   

    java.net.SocketException: Connection reset
      

  6.   

    你发送数据时用这个方法write()不要用print()或者println ()这两个是直接输到标准设备上啊!你要了解好了这些方法.然后再编写嘛!去看API你就会明白的!
      

  7.   

    ss= new ServerSocket(port, pools);
    这个方法,你先换成ServerSocket(int port)
    试一下。..看下,还有那个错误不?
      

  8.   

    你的客户端只有发送数据没有接收数据的代码,当然要你Connection reset
      

  9.   

    不好意思,这几天都比较忙,没时间来上论坛了。
    我看了我的代码,原来在程序结束前,都没关闭socket,所以server就报异常了。
    谢谢楼上的建议.