Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多客户机服务器,其中一个客户机只能向服务器发送消息,但向java中的所有客户机发送服务器消息_Java_Sockets - Fatal编程技术网

多客户机服务器,其中一个客户机只能向服务器发送消息,但向java中的所有客户机发送服务器消息

多客户机服务器,其中一个客户机只能向服务器发送消息,但向java中的所有客户机发送服务器消息,java,sockets,Java,Sockets,我希望服务器发送的消息应该传递给所有的客户端,但是客户端发送的消息应该只传递给服务器 问题是当我运行代码时- 1.服务器等待客户端连接 2.当多个客户端连接时 3.现在,当服务器广播第一条消息时,它会被两个客户端接收,但当服务器广播第二条消息时。两个客户端都必须发送消息才能接收服务器消息。 我是socket编程的新手,请纠正我的错误? 到目前为止,我已经制作了这个程序 服务器代码: import java.util.ArrayList; import java.util.Iterator; im

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

问题是当我运行代码时- 1.服务器等待客户端连接 2.当多个客户端连接时 3.现在,当服务器广播第一条消息时,它会被两个客户端接收,但当服务器广播第二条消息时。两个客户端都必须发送消息才能接收服务器消息。 我是socket编程的新手,请纠正我的错误?
到目前为止,我已经制作了这个程序

服务器代码:

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();
    }

   }


  }

多播是您正在寻找的。。我不能使用tcp执行它吗?有必要使用数据报吗?UDP不可靠(数据包丢失),tcp是确保消息按顺序发送的方法。
  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.");  
      }
   }
}