线程睡眠冻结了我的代码.Java客户机-服务器通信



我编写了一个程序,在两台计算机之间创建一个使用套接字的通信。当前程序使服务器向客户端发送从1到50的数字。

当我运行这个程序时,通过控制台的输出看起来太快了,所以我想让消息发送者线程睡眠一秒钟。然而,当我写try catch使线程睡眠时,整个程序停止。我做错了什么?

服务器端:

public class ControladorClientes extends Thread{
public Socket s;
private OutputStreamWriter osw;
public InputStreamReader isr;

public ControladorClientes(Socket s) {
try {
this.s = s;
this.osw = new OutputStreamWriter(s.getOutputStream());
this.isr = new InputStreamReader(s.getInputStream());

}catch(IOException e) {
e.printStackTrace();
}
}

@Override
public void run() {
Thread tWriter = new ServerWriter(osw);
tWriter.start();
}
}

ServerWriter:

public class ServerWriter extends Thread{
OutputStreamWriter osw;

public ServerWriter(OutputStreamWriter osw) {
this.osw = osw;
}

@Override
public void run() {
int n = 1;
boolean active = true;
BufferedWriter bw = new BufferedWriter(osw);
while(active) {
try {
bw.write("Server: " + Integer.toString(n));
bw.newLine();
n++;
if(n==50) n = 1;
try{Thread.sleep(100);}catch(InterruptedException ex){ex.printStackTrace();;}
}catch(IOException e) {
try {
active = false;
if(bw != null) bw.close();
}catch(IOException f) {e.printStackTrace();f.printStackTrace();}
}           
}
}
}

客户:

import java.io.*;
import java.net.*;
public class SimpleClient {
public static void main(String[] args){
try {
Socket s = new Socket("localhost", 5555);

InputStreamReader isr = new InputStreamReader(s.getInputStream());
Thread tReader = new ClientReader(isr);
tReader.start();
}catch(IOException e) {e.printStackTrace();}
}
}

And the ClientReader:


import java.io.*;
import java.net.*;
public class ClientReader extends Thread {
InputStreamReader isr;
public ClientReader(InputStreamReader isr) {
this.isr = isr;
}

@Override
public void run() {
BufferedReader br = new BufferedReader(isr);
while(true) {
try {
String msg = br.readLine();
System.out.println(msg);
} catch (IOException e) {e.printStackTrace();break;}
}
}
}

添加bw.flus()似乎解决了我所有的问题。

最新更新