高手请务必请来,该问题困扰我三天了....我也不知道到底和什么有关,swing&socket&threads 把网络连接的代码都放在一个thread中就ok了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to: ahtu 把函数放到一个线程里就可以了,谢谢 但是为什么会这样呢? in是个阻塞的输入流,readLine()方法被阻塞直至有数据输入。 我放入一个线程里后又出现新的问题,server回送的信息client收不到,server端确实是发送出去了。client的login()函数发送login请求给serverpublic 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()); } } 下面是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){} } 吸血鬼数字 从Exlipse转到JCreator找不到类文件 jar打包问题 JAVA多线程里面隔不同的时间执行不同的操作应该怎么弄啊? 求Graphics2D画图示例代码! I/O读取文件的问题 字串转换输出?高手帮忙!!! 请教一个JTextField问题,现丑了 小问题,在jbuilder中怎么设定jtree的多选属性? 怎么设计利用socket读取PLC信息 这是怎么回事:Note: electriclight.java uses or overrides a deprecated API. 如何在application中一幅一幅地显示10幅JPEG图片??
把函数放到一个线程里就可以了,谢谢
但是为什么会这样呢?
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());
}
}
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){}
}