客户机这端:
public void run(){
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out =new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),true);
System.out.println(new GetDate().getTime()+":客户机开始发送请求Client");
out.println("Client");
System.out.println(new GetDate().getTime()+":客户机发送完请求Client");
String ok = in.readLine(); System.out.println(new GetDate().getTime()+":客户机收到回复"+ok); } catch(Exception e){
System.out.println("connectServerException");
}
} 服务器这端:public void run(){
try {
ServerSocket s = new ServerSocket(PORT);
while (true) {
//等待接收客户请求
Socket socket = s.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),true);
String ID = in.readLine();
System.out.println(new GetDate().getTime()+":服务器收到请求"+ID);
if(ID.equals("管理员")){
OperateManageRequest omr = new OperateManageRequest(socket);
omr.start();
}else{ //因为我客户端开始传来了一个ID为:"Client",所以这里为他开启了一个
//线程 OperateClientRequest 来处理这个客户的需求
OperateClientRequest ocr = new OperateClientRequest(socket);
ocr.start();
}
}
}catch (Exception e){}
} 处理客户需求的线程 OperateClientRequest:public class OperateClientRequest extends Thread{
private Socket s;
public OperateClientRequest (Socket int_s) { s = int_s; }
public void run(){
try {BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out =new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())),true);
System.out.println(new GetDate().getTime()+":服务器开始发送回复");
sleep(1000);
System.out.println(new GetDate().getTime()+":服务器发送回复中40%");
sleep(1000);
System.out.println(new GetDate().getTime()+":服务器发送回复中80%");
//服务器发送回复
out.write("服务器已经与您建立了连接");
System.out.println(new GetDate().getTime()+":服务器发送完回复");
}catch (Exception e){
System.out.println("OperateClientRequestException");
}finally {
try{
sp.addNote("断开与用户"+clientName+"的连接");
s.close();
}catch (IOException ioe){}
}
}
}
最后客户发送"Client" 服务器接到了,服务器回复了"服务器已经与您建立了连接",但是客户机接不到这个回复是为什么啊?屏幕上的显示是:
客户机端:20:46:42:客户机开始发送请求Client
20:46:42:客户机发送完请求Client服务器端:
20:46:42:服务器收到请求Client
20:46:43:服务器开始发送回复
20:46:44:服务器发送回复中40%
20:46:45:服务器发送回复中80%
20:46:45:服务器发送完回复郁闷中。
public void run(){
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out =new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),true);
System.out.println(new GetDate().getTime()+":客户机开始发送请求Client");
out.println("Client");
System.out.println(new GetDate().getTime()+":客户机发送完请求Client");
String ok = in.readLine(); System.out.println(new GetDate().getTime()+":客户机收到回复"+ok); } catch(Exception e){
System.out.println("connectServerException");
}
} 服务器这端:public void run(){
try {
ServerSocket s = new ServerSocket(PORT);
while (true) {
//等待接收客户请求
Socket socket = s.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),true);
String ID = in.readLine();
System.out.println(new GetDate().getTime()+":服务器收到请求"+ID);
if(ID.equals("管理员")){
OperateManageRequest omr = new OperateManageRequest(socket);
omr.start();
}else{ //因为我客户端开始传来了一个ID为:"Client",所以这里为他开启了一个
//线程 OperateClientRequest 来处理这个客户的需求
OperateClientRequest ocr = new OperateClientRequest(socket);
ocr.start();
}
}
}catch (Exception e){}
} 处理客户需求的线程 OperateClientRequest:public class OperateClientRequest extends Thread{
private Socket s;
public OperateClientRequest (Socket int_s) { s = int_s; }
public void run(){
try {BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out =new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(s.getOutputStream())),true);
System.out.println(new GetDate().getTime()+":服务器开始发送回复");
sleep(1000);
System.out.println(new GetDate().getTime()+":服务器发送回复中40%");
sleep(1000);
System.out.println(new GetDate().getTime()+":服务器发送回复中80%");
//服务器发送回复
out.write("服务器已经与您建立了连接");
System.out.println(new GetDate().getTime()+":服务器发送完回复");
}catch (Exception e){
System.out.println("OperateClientRequestException");
}finally {
try{
sp.addNote("断开与用户"+clientName+"的连接");
s.close();
}catch (IOException ioe){}
}
}
}
最后客户发送"Client" 服务器接到了,服务器回复了"服务器已经与您建立了连接",但是客户机接不到这个回复是为什么啊?屏幕上的显示是:
客户机端:20:46:42:客户机开始发送请求Client
20:46:42:客户机发送完请求Client服务器端:
20:46:42:服务器收到请求Client
20:46:43:服务器开始发送回复
20:46:44:服务器发送回复中40%
20:46:45:服务器发送回复中80%
20:46:45:服务器发送完回复郁闷中。
这里ok返回是什么值你跟下看看
out.write("服务器已经与您建立了连接");
应该是 out.println
晕啊,在这上面浪费了2天
在这一句之后加
out.flush();
但后面要加out.flush();
你把主线程的BufferedReader in和PrintWriter out也传递给子线程OperateClientRequest看看。