日期:2014-05-20  浏览次数:20758 次

socket 服务端能接收消息 控制台答应不出来是怎么回事?
用 java写了一个服务端和客户端,运行后服务端能判断出来接收到了消息,可到System。out.print后却不运行了  
是怎么回事?我是一新手  大家帮帮忙  感激不尽!!在线等  !!
服务端:

public class ServerThread {
private int port = 8000;
private ServerSocket serverSocket;
private static ExecutorService executorService;

public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(8000);
while (true) {
Socket s = ss.accept();

System.out.println("服务器启动");
Thread th = new Thread(new ServerThread().Server(s));
System.out.println(th.getName());
th.start();
}
}
public static Runnable Server(Socket soc) {
final Socket socket = soc;
return new Runnable() {
String str = "";
public void run() {
try {
System.out.println("连接 " + socket.getInetAddress() + ":"
+ socket.getPort());
InputStreamReader in = new InputStreamReader(
socket.getInputStream());
// BufferedReader br=new BufferedReader(in);
// OutputStreamWriter out = new OutputStreamWriter(
// socket.getOutputStream());
int msg;
while ((msg = in.read()) > -1) {
str += (char) msg;
System.out.println(str + "起動");
}
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
}

}
};

}

}
客户端:
public class Client1 {

public static void main(String[] args) {
             SingleThread(1).run();
}

public static Runnable SingleThread(final int id) {
return new Runnable() {
Socket socket;
int port = 8000;
String str = "";
public void run() {
System.out.println("线程"+id + ":开始");
try {
socket = new Socket("127.0.0.1", port);
InputStreamReader in = new InputStreamReader(
socket.getInputStream());
OutputStreamWriter out = new OutputStreamWriter(
socket.getOutputStream());
String msg = "";
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Enter yout name");
msg = br.readLine();

out.write(msg);
System.out.println(msg);
out.flush();   
int c = 0;
while ((c = in.read()) > -1) {
str += (char) c;
}
System.out.println(str);
if(str.equals("bye")){
out.close();
Thread.interrupted();
}
System.out.println("线程"+id + ":结束");

} catch (Exception e) {
System.out.println(e.toString());
}

}
};
}

}



------解决方案--------------------
因为msg = in.read()是阻塞的,没有消息过来它会一直等。