就是用socket 和多线程做的广播,现在问题是,如果一个client 发了消息,server端可以收到,并且已经把这个消息发给所有的client了,但是为什么在客户端显示不出来啊?是我的客户端接受有问题么?麻烦大家帮我看下,该怎么改啊?都搞了一晚上了。。
先谢过~SocketServer类:
public class SocketServer {
 public static void main(String[] args) throws IOException{
     List list=new ArrayList();
 ServerSocket server=new ServerSocket(5678);
 int count=0;
  while(true){
  Socket ss=server.accept();   
  list.add(ss);
  count++;
      SocketThread mulserver=new SocketThread(ss,list);
      System.out.println("The number of clients is: "+count);
      mulserver.start();
  }
  }}SocketThread类:
public class SocketThread extends Thread{
 private Socket client;      
 List list;
 public SocketThread(Socket accept, List list) {
this.client=accept;
this.list=list;
}
 
 public void run(){
try{
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));   
 while(true){
String str;
str = in.readLine();
broadcast(str);
         if(str.equals("end"))
break;
}
client.close();
}catch (IOException e) {
e.printStackTrace();
} finally{}
}

public void broadcast(String str) throws IOException{

for(Iterator it=list.iterator();it.hasNext();){ 
 Socket ss=(Socket)it.next();  
 PrintWriter out=new PrintWriter(ss.getOutputStream());
 System.out.println("socket:  "+ss+"server sent "+str);
 out.println("socket:  "+ss+"server sent "+str);//这个可以得到
 out.flush();
}
 }
}最后是我的客户端,应该是这个不对吧;
public class SocketClient{
static Socket server;
public static void main(String[] args)throws Exception{
server=new Socket(InetAddress.getLocalHost(),5678);
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
PrintWriter out=new PrintWriter(server.getOutputStream());
 BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));   
  
while(true)
 {  
   while(in.readLine()==null){   
        String str=wt.readLine();
       out.println(str);
        out.flush(); 
                 if(str.equals("end"))
break;
        System.out.println(in.readLine());
            }
 out.println(in.readLine());
 server.close();
 }
}
}

解决方案 »

  1.   

    从你贴的代码上看,你的服务端没有调用SocketThread类的run()方法,也就是没有进行广播啊。
      

  2.   


    我用mulserver.start() 就是调用SocketThread类的run()方法了啊
      

  3.   

    while(in.readLine()==null){  //为null才执行...
    String str=wt.readLine();
    out.println(str);
    out.flush();
      if(str.equals("end"))
    break;
    System.out.println(in.readLine());
      }
      

  4.   

    while(in.readLine()==null)//这个条件有问题吧 ,当没有收到消息的时候才进入循环读???????????
      

  5.   

    我也觉得这个地方的逻辑不太对,但是不太明白应该怎样改才对。
    有人可以说一下while(true)里面的思路吗?谢谢!
      

  6.   

    我看网上好多人客户端都是用GUI监听的,可以不用吗?