如何向所有客户端发送消息(JAVA)

时间:2015-01-19 19:41:10

标签: java server

我想向所有客户广播所有消息。我可以看到只有发送消息的用户才能看到他的消息。例如:newbie:hi - >只有我能看到这个,没有其他客户。

我试过了:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ServerPeer extends Thread{
    Socket socket;
    public ServerPeer(Socket socket)
    {
        this.socket=socket;
    }

    public void run()
    {

         while(socket.isConnected())
         {

             {

                 for(ServerPeer sp:Server._noclients)
                     try {
                         ObjectInputStream objin=new ObjectInputStream(socket.getInputStream());
                         Message classmessage=(Message)objin.readObject();
                         System.out.println(classmessage.getAll());
                         objin=new ObjectInputStream(socket.getInputStream());

                     } catch (IOException ex) {
                         Logger.getLogger(ServerPeer.class.getName()).log(Level.SEVERE, null, ex);
                     } catch (ClassNotFoundException ex) {
                         Logger.getLogger(ServerPeer.class.getName()).log(Level.SEVERE, null, ex);
                     }

                 }
            }
       }
  }

ClientPeer类:

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ClientPeer extends Thread{
    String username;
    Socket socket;
    public ClientPeer(String username,Socket socket)
    {
        this.username=username;
        this.socket=socket;
    }
    @Override
    public  void run()
    {
        Scanner input=new Scanner(System.in);
        String string=input.nextLine();
        while(true)
        {
            if(!string.startsWith("/w") && !string.equals("exit") && !string.equals(null))
            {

                    try {

                            sendMessage(string);


                        // arraymessages.add(username+":"+string);
                        //  for(int i=0;i<Server._noclients.size();i++)
                        //   System.out.println(username+" "+string);
                    } catch (IOException ex) {
                        Logger.getLogger(ClientPeer.class.getName()).log(Level.SEVERE, null, ex);
                    }

               //  try {
               //     for(int i=0;i<Server._noclients.size();i++)
               //          sendMessage(string);
               // } catch (IOException ex) {
               //     Logger.getLogger(ClientPeer.class.getName()).log(Level.SEVERE, null, ex);
               // }


               // for(String s:arraymessages)
               //     System.out.println(s);
                System.out.println(username+":"+string);
            }
       //   else if(string.startsWith("/w"))
         // {
           //   String []vect=string.split(" ");
            //  Scanner newin=new Scanner(System.in);
            //  System.out.println("write");
            //  String newmess=newin.nextLine();
            //  for(String p:users)
              //    if(p.equals(vect[1]))
               //       try {
              //            sendMessage(newmess,p);
              //}// catch (IOException ex) {
                 // Logger.getLogger(ClientPeer.class.getName()).log(Level.SEVERE, null, ex);
             // }


         // }
             string=input.nextLine();

        }

    }
    public void sendMessage(String message) throws IOException
    {
        ObjectOutputStream object=new ObjectOutputStream(socket.getOutputStream());
        object.writeObject(new Message(message,username));
        object.flush();

    }
    public void sendMessage(String message,String whoto) throws IOException
    {
        ObjectOutputStream object2=new  ObjectOutputStream(socket.getOutputStream());
        object2.writeObject(new PrivateMessage(username,message,whoto));
        object2.flush();
    }
}

0 个答案:

没有答案