把网络连接的代码都放在一个thread中就ok了

解决方案 »

  1.   

    to: ahtu
       把函数放到一个线程里就可以了,谢谢
       但是为什么会这样呢?
      

  2.   

    in是个阻塞的输入流,readLine()方法被阻塞直至有数据输入。
      

  3.   

    我放入一个线程里后又出现新的问题,server回送的信息client收不到,server端确实是发送出去了。
    client的login()函数发送login请求给server
    public void login(){
        try{
          Thread thread = new Thread(new Runnable(){
            public void run(){
              try{
                Socket socket = new Socket("192.168.7.20",5000);//连接服务器
            BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter out=new PrintWriter(new BufferedWriter(
            new OutputStreamWriter(socket.getOutputStream())),true);        String id = jtf1.getText();
            String pass = jtf2.getText();
            String send = LOGIN + "//" + id + "//" + pass;   //LOGIN = "L";
            out.println(send);        String str=" ";
              str=in.readLine().trim();   //server处理了id和pass后回送确认信息,可是我发现client端就停在这里了.....
              if(str.equals("loginOK")){
                System.out.println("login successfully");
              }else if(str.equals("wrongpass")){
                System.out.println("Wrong Password!");
               }
              }catch(Exception e){}
            }
          }
            );        thread.start();      }catch(Exception e){
            System.out.println(e.getMessage());
           }
      }
      

  4.   

    下面是server端:
    server端对client的login请求的处理:if(v.firstElement().equals("L")){      //send的第一个字符是"L"
              System.out.println("login...");
              try{
                String connectToDB = "jdbc:odbc:chat";   //在数据库里查找是否有该ID和password是否正确
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                Connection conn = DriverManager.getConnection(connectToDB);
                Statement stmt = conn.createStatement();
                String find = "SELECT password FROM client WHERE id = '"+v.elementAt(1)+"';";
                ResultSet rs = stmt.executeQuery(find);
                if(!rs.next()){
                  System.out.println("Wrong ID");
                }else{
                  String tempp = rs.getString("password");
                  if(tempp.equals(v.elementAt(2))){
                    output.writeBytes("loginOK"); //设置断点发现输出流输出了"loginOK"
                    System.out.println("successful loginn!");    //这里输出了
                  }else{
                    output.writeBytes("wrongpass");
                    System.out.println("WrongPass");
                  }
                }
              }catch(Exception e){System.err.println(e.getMessage());}
            }
          }
        }catch(Exception e){}
      }