多客户端服务器,客户端只能向服务器发送消息,而服务器只能向java中的所有客户端发送消息

时间:2014-06-17 03:05:16

标签: java sockets

我希望服务器发送的消息应该传递给所有客户端,但是客户端发送的消息只能传递给服务器。

问题是当我运行代码时 - 1.Server等待客户端连接 2.当多个客户端连接时 3.现在服务器广播第一条消息,它是由两个客户端接收的,但是当服务器第二次广播该消息时。客户端都必须发送消息才能接收服务器消息。 我是套接字编程的菜鸟,所以请纠正我的错误吗? 到目前为止,我已经制定了这个计划。

服务器代码:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;
import java.net.*;
import java.io.*;


public class Server_Side3 
{

 static  Client_server t[] = new Client_server[10];

static LinkedList<Client_server> al = new  LinkedList<Client_server>();



public static void main(String args[]) throws IOException
   {   
    ServerSocket server = null ;
     Socket socket = null;


    try 
    {

        int Port =9777;

        server = new ServerSocket(Port);

        System.out.println("Waiting for Client " + server);

    while(true)
    {

        socket = server.accept();

    System.out.println("Connected to " + socket.getLocalAddress().getHostAddress());

            Client_server clients = new Client_server(socket);

            al.add(clients);


            clients.start();


        }

    } 
    catch (Exception e)
    {
        System.out.println("An error occured."); 
        e.printStackTrace();

    }   

    try
    {
        server.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

   }

private static class Client_server extends Thread
{
    Socket sockets;
    PrintWriter out;

    Client_server t[];  

    Client_server (Socket s )
    {
        sockets = s;
    }

    public void run()
    {

        try
        {       

            InetAddress localaddr = InetAddress.getLocalHost();

            Scanner sc = new Scanner(System.in);

            Scanner in = new Scanner(sockets.getInputStream());

             out = new PrintWriter(sockets.getOutputStream(),true);


             String input = null;

            while(true)
            {


                String servermsg = sc.nextLine();

                broadcast(servermsg);

                System.out.println("Message sent to client: "+servermsg);



                    input = in.nextLine();
            System.out.println(localaddr.getHostName()+" Said :"+ input);




                }



            } 


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

    }

    private   void broadcast(String servermsg)
    {
        Iterator it = al.iterator();
        while(it.hasNext())
        {
            ((Client_server) it.next()).send(servermsg);
        }

    }


    private  void send(String msg)
    {
        String servrmsg = msg;
        out.println(msg);
        out.flush();
    }

   }


  }

客户代码:

  import java.net.Socket;
  import java.io.PrintWriter;
  import java.net.Socket;
  import java.util.Scanner;

   public class ClientSide2 
   {

static Scanner chat = new Scanner(System.in);                             



public static void main(String[] args)
 {
    int Port = 9777;
    String Host = "localhost";




    try 
    {
        Socket socket = new Socket(Host, Port);
        System.out.println("You connected to "+ Host);

      Scanner in = new Scanner(socket.getInputStream());  //GET THE CLIENTS INPUT STREAM 

        PrintWriter out = new PrintWriter(socket.getOutputStream());

        String clientinput;

        while(true)                                                        
        {       


    System.out.println(in.nextLine());//If server has sent us something .Print it       


                clientinput=chat.nextLine();                 
                out.println(clientinput);               //SEND IT TO THE SERVER
                out.flush(); 





         }




    } 
    catch (Exception e)
    {
        System.out.println("The server might not be up at this time.");
        System.out.println("Please try again later.");  
      }
   }
}

0 个答案:

没有答案