我是想做个多人聊天室的小程序,于是服务器用ServeSocket和socket类客户端用socket类 互相通信。事实上 我是想打开多个进程,每个进程是一个客户端来模拟多人聊天import java.net.*;
import java.io.*;
public class clicentSock {
public static void main(String[] args) {
for(int i=0;i<5;i++){
new one_clicent().run();
}
}}
客户端单个进程是这么循环的:public void run(){
BufferedReader in=null;
BufferedWriter out=null;
in=new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
out=new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream()));
         String str=null;
while(true){
str=in.readLine();
if(str.equals("end"))
          break;
}
}
以上就是主要代码,这么一来 就不停地死循环了 
(第二个进程根本不启动)问题就出在我使用了while死循环来使得程序不断检测是否得到了输入流。那么 有没有某种阻塞办法 能让程序检测到有数据流交换 才readline呢

解决方案 »

  1.   

    现在这种情况不就是默认情况下是堵塞状态, 当有输入流的时候才readline一下的么。
      

  2.   

    和socket无关,是你线程理解错了
    对于多线程,线程的启动是 start,而不是run()
    run()是在线程启动后被系统调用的。so
    for(int i=0;i<5;i++){
                new one_clicent().start();
            }  
    这里假设你的one_clicent类是继承Thread的
      

  3.   

    new one_clicent().start();
      

  4.   

    = = ...确实是应该用start....
      

  5.   

    问题解决~~~多谢 
    顺便问下....我现在是让服务器每连上一个客户端,就产生一个进程 产生一个socket专门和这个客户端通信,比如服务器接收到了客户1的信息,怎么让服务器把信息传递给其他客户端呢...
    每个socket都是这么关联bufferedreaer的:in=new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
    out=new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream()));这么一来 服务器的每个进程和一个客户打交道  但是多人聊天的话 ,一个客户传输的信息,应该对每个服务器产生的进程来更新才行吧...
      

  6.   

    目前是这么搞的: while(true){
    String  str;
    str=in.readLine();
    out.write(str+"\n");
    out.flush();
    if(str.equals("end")){
    break ;
    }
    }这么一来 服务器把接收到的信息回传给客户端来显示,但是我想实现的是,把接收到的信息回传给所有客户端来显示。