现在有个定时器,固定时间去
用socket客户端发送指令往server端,
一个类单独写两个方法用于发送指令和接受server端返回的消息,此类的构造函数中从定时器端传入InputStreamReader和BufferedReader。
问题:单独运行定时器时没问题,但于socket一起就不能发送消息到server端,server端也接受不到请求信息。
现象:当发送请求方法发送完一条指令关闭时就可以发送出去,server也可以接受到,但当接受方法接受返回消息时报异常---connetion reset怎么解决?

解决方案 »

  1.   

    检查一下你的socket端连接的关闭与server端连接的关闭
    当你的socket与server建立连接后 
    没有等到server传送数据就关闭了连接
    就会出现connetion reset。
      

  2.   

    。。
    还是没搞定,我把代码贴出,请帮忙看哈问题何在!!!一:定时器中用到调用socket客户端的方法
    public void start(){
    int[] weeksday = getWeeksDay(days); AbcCustomerIterator abcScheduler = new AbcCustomerIterator(dayStartHour,dayEndHour,dayStartMinute,dayEndMinute,internal,startTime,weeksday);
    scheduler.schedule(new SchedulerTask(){
    public void run() { 
    //abcDoSomething();  // 定时去完成的某个事项的方法
    tc.sendMessage("....rrrrr"); //tc---封装的socket类
    }
    }, abcScheduler);
    }二:socket客户端类public class MessageTransact {
    private InputStreamReader in;
    private BufferedReader br;
    private OutputStreamWriter out;

    private Socket socket; public MessageTransact(Socket socket,BufferedReader br,OutputStreamWriter out){
    this.socket = socket;
    this.br = br;
    this.out = out;
    }

    public void sendMessage(String requestMessage){ //发送指令方法
    try {
    out.write(requestMessage);
    out.flush();
    } catch (IOException e) {
    e.printStackTrace();
    System.out.println("writer serversocket ioException");
    }
    }

    public String acceptMessage(){ //---接受serversocket方法
    StringBuffer xml = new StringBuffer("");
    String results = null; try {
    results = br.readLine();
    } catch (IOException e) {
    e.printStackTrace();
    System.out.println("reader serversocket line ioexception");
    }
    while(results != null && results.length() > 0){
    xml.append(results);
    }
    return xml.toString();
    }
    }三:server端  -- 测试public class TestServer {
     
    public static void main(String args[]){
    try {
    ServerSocket ss = new ServerSocket(8855);
        Socket socket = ss.accept();
        
        BufferedReader readerClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintStream writerClient = new PrintStream(socket.getOutputStream(),true);
        writerClient.println("link server is ok@!");
        String temp = "";
        boolean b = false;
        while(!b){
         System.out.println("echo:"+temp);
          temp = readerClient.readLine();
         writerClient.println("echo: "+temp);
         writerClient.flush();
         if(temp.equals("bye")){
         b = true;
         //return;
         }
        }
        writerClient.close();
        readerClient.close();
        ss.close();
    } catch (IOException e) {
    }
    }
    }
      

  3.   

    temp.equals("bye")
    应该是永远读不到BYE,所以服务端不会终止,建议在送的消息里面加个换行然后加上bye