如何在Java中使用TCP / IP将相同的数据从服务器发送到所有客户端?

安全模式

如何在套接字多线程中使用Java中的TCP / IP从服务器向所有客户端发送相同的数据?

我试图将数组从第一个客户端发送到服务器第二个客户端将数组发送到服务器

当服务器接受两个客户端时,它将两个数组合并为一个数组并对其进行排序,然后将其作为响应发送给两个客户端

代码:

Server.java文件:

   import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Server
{
       public static void main(String[] zero) throws InterruptedException
       {
               ServerSocket socket;
               int nb = 0;

               try { 

                        socket = new ServerSocket(6789,2);
                        //creé le thread  
                        Thread t = new Thread(new Accepter_clients(socket,nb));
                        t.start();

                        System.out.println("Mes employeurs sont prêts !");
                   } 

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

//**********************************************************************************
//**********************************************************************************

class Accepter_clients implements Runnable 
{
           private ServerSocket socketserver;
           private Socket socket;
           private int nbrclient ;
        //  private Boolean etat=Boolean.FALSE;
           ObjectOutputStream out;
           ObjectInputStream in ;
           int []  tableauAEmettre ;
           List<Object> liste = new ArrayList<Object>();



     public Accepter_clients(ServerSocket s,int nb)
      {
           this.socketserver = s;
           this.nbrclient=nb;
           System.out.println("serveur n :"+nbrclient);
      }


     public  void run() //pour un seul thread à la fois
    {

         try {


             while(true)
              {
                this.socket = socketserver.accept(); // Un client se connecte onl'accepte
                System.out.println("Le client numéro "+nbrclient+" est connecté !");
                nbrclient++;
                this.out = new ObjectOutputStream(this.socket.getOutputStream());

                    //System.out.println("serveur envoi: " + tabl);
                read();

                write();

                    this.socket.close();

               }

         }
         catch (IOException | ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.getMessage();
        }

    }
     public synchronized void read() throws ClassNotFoundException, IOException
     {  

         this.in = new ObjectInputStream(socket.getInputStream());
         Object objetRecu= this.in.readObject();
         tableauAEmettre= (int[]) objetRecu;

        for( int i=0;i<tableauAEmettre.length;i++){
            liste.add(tableauAEmettre[i]);
        }
            System.out.println("serveur recoit depuis Client: "+ (nbrclient-1) +" : "+ liste);
            this.notify();



     }

     public synchronized void write()
     {  


         try {
             System.out.println("Je suis la !!!");
             this.wait();
             Object tt = liste.toArray();
             int[] t = (int[]) tt ;
             Arrays.sort(t);
            // List<Object> tabl=tri(liste);
             System.out.println("Je suis la hihihih !!!");

             this.out.writeObject(t);
             this.out.flush();
             this.notify();
        } 
         catch (IOException e) {
            // TODO Auto-generated catch block
            e.getMessage();
        } 
         catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.getMessage();
        }

     }


//Fonction permet de trie les tableau
}

Client.java文件:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.*;
import java.util.Arrays;

public class Client {

    public static void main(String[] zero) throws ClassNotFoundException{

        Socket socket;
        ObjectInputStream in;
        ObjectOutputStream out ;

        try {
                socket = new Socket("localhost",6789);

                out = new ObjectOutputStream(socket.getOutputStream());
                out.flush();

                int lower = 3;
                int higher = 15;

                int random = (int)(Math.random() * (higher-lower)) + lower;
                int[] tableauAEmettre= new int[random];

                for (int i=0;i<random;i++)
                {
                    tableauAEmettre[i]=(int)(Math.random() * (40-0)) + 0;
                }

                out.writeObject(tableauAEmettre);
                out.flush();
                System.out.println("Client 1 envoi: " + Arrays.toString(tableauAEmettre));

                 in = new ObjectInputStream(socket.getInputStream());
                 Object objetRecu = in.readObject();
                 int[] tableauRecu = (int[]) objetRecu;
                 System.out.println("Client 1 recoit: " + Arrays.toString(tableauRecu));

                 in.close();
                 out.close();
                 socket.close();
                 socket.close();

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

Client2.java文件:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.*;
import java.util.Arrays;


public class Client2 {

    public static void main(String[] zero) throws ClassNotFoundException{

        Socket socket;
        ObjectInputStream in;
        ObjectOutputStream out ;

        try {
                socket = new Socket("localhost",6789);

                out = new ObjectOutputStream(socket.getOutputStream());
                out.flush();

                int lower = 3;
                int higher = 15;

                int random = (int)(Math.random() * (higher-lower)) + lower;
                 int[] tableauAEmettre= new int[random];

                for (int i=0;i<random;i++)
                {
                    tableauAEmettre[i]=(int)(Math.random() * (40-0)) + 0;
                }

                out.writeObject(tableauAEmettre);
                out.flush();
                System.out.println("Client 2 envoi: " + Arrays.toString(tableauAEmettre));

                 in = new ObjectInputStream(socket.getInputStream());
                 Object objetRecu = in.readObject();
                 int[] tableauRecu = (int[]) objetRecu;
                 System.out.println("Client 2 recoit: " + Arrays.toString(tableauRecu));

                 in.close();
                 out.close();
                 socket.close();
                 socket.close();

            } 
        catch (IOException e) 
           {
                 e.printStackTrace();
           }
     }
}
双双

如Peter Lowry所建议,您将希望接受的连接线程与读写分开。我的示例非常简洁,将需要更多代码才能正常工作,但足以说明问题。

会有一些课程来帮助管理套接字

Class Connection {//possibly implements runnable
    Socket socket;
    ObjectInputStream in;
    ObjectOutputStream out;

    public Connection(Socket s) {
        this.socket = s;
        this.in = s.getInputStream();
        this.out = s.getOutputStream();
    }

    public void sendData(Object o)
    {
        out.sendObject(o);
    }
}

并在主函数中设置了接收线程,并具有用于读取和写入的服务器循环。

main(String[] zero) throws ClassNotFoundException{
    ArrayList<Connection> connections = new ArrayList<Connection>();
    //...
    Thread t = new Thread(new Accepter_clients(connections));
    t.start();

    //Server read/write loop
    boolean continue = true;
    while (continue)
    {
        synchronized(connections)
        {
            for (Connection c : connections)
            {
                //c.sendData();
            }

            for (Connection c : connections)
            {
                //c.readData();
            }
        }
    }
}

最后是您的接受线程...监视并将新连接添加到连接列表。

ArrayList<Connection> connections;
public Accepter_clients(ArrayList<Connection> connections)
  {
      this.connections = connections;
  }

public void run()
{
    ServerSocket s; //initialize here
    while (true) //some boolean to continue instead
    {
        //...
        Connection newConn = new Connection(s.accept);
        synchronized (connections) { //cant modify list while using it elsewhere
            connections.add(newConn);
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在node.js中将数据从服务器发送到客户端

来自分类Dev

如何在Meteor中将数据从客户端发送到服务器?

来自分类Dev

gRPC 中数据如何从客户端发送到(多服务)服务器

来自分类Dev

如何从服务器读取数据并将数据发送到客户端?

来自分类Dev

Java-在客户端识别来自服务器的发送到一个和发送到所有消息

来自分类Dev

每秒将数据从移动客户端发送到Java服务器

来自分类Dev

Java套接字-将数据从服务器发送到客户端

来自分类Dev

将数据从Java客户端发送到Node.js服务器

来自分类Dev

Java套接字-将数据从客户端发送到服务器

来自分类Dev

MySQL服务器如何检索并将数据发送到客户端?

来自分类Dev

如何将数据从Web套接字服务器发送到客户端?

来自分类Dev

React 和 NodeJS:如何将数据从服务器发送到客户端?

来自分类Dev

如何将表单数据从客户端发送到服务器

来自分类Dev

将数据从服务器发送到不带集合的客户端(使用Websocket)

来自分类Dev

使用socket.io在服务器事件中将数据从服务器发送到客户端

来自分类Dev

使用 TCP/IP 通信将随机生成的字节数组从客户端发送到服务器

来自分类Dev

如何使用Websocket将Spark Streaming数据从服务器端发送到客户端?

来自分类Dev

如何将数据从TCP Python服务器发送到客户端,反之亦然?

来自分类Dev

如何将多个数据流从单个客户端发送到TCP服务器

来自分类Dev

使用TCP c#将数据包从服务器发送到特定客户端

来自分类Dev

服务器如何使用Java将消息发送到客户端

来自分类Dev

Ruby如何通过TCP(http)服务器将图像发送到客户端

来自分类Dev

如何在WinForm SIgnalR中单击按钮将数据从服务器发送到特定的客户端ID

来自分类Dev

在python中使用HTTP将图像从服务器发送到客户端

来自分类Dev

将数据从Python TCP套接字(作为服务器)发送到JS客户端

来自分类Dev

如何在Node.js中将文件从服务器发送到客户端

来自分类Dev

如何在python中将图片从服务器发送到客户端

来自分类Dev

Spring Integration TCP服务器将消息发送到TCP客户端

来自分类Dev

Angular2:发出请求时如何将数据从客户端发送到服务器

Related 相关文章

  1. 1

    如何在node.js中将数据从服务器发送到客户端

  2. 2

    如何在Meteor中将数据从客户端发送到服务器?

  3. 3

    gRPC 中数据如何从客户端发送到(多服务)服务器

  4. 4

    如何从服务器读取数据并将数据发送到客户端?

  5. 5

    Java-在客户端识别来自服务器的发送到一个和发送到所有消息

  6. 6

    每秒将数据从移动客户端发送到Java服务器

  7. 7

    Java套接字-将数据从服务器发送到客户端

  8. 8

    将数据从Java客户端发送到Node.js服务器

  9. 9

    Java套接字-将数据从客户端发送到服务器

  10. 10

    MySQL服务器如何检索并将数据发送到客户端?

  11. 11

    如何将数据从Web套接字服务器发送到客户端?

  12. 12

    React 和 NodeJS:如何将数据从服务器发送到客户端?

  13. 13

    如何将表单数据从客户端发送到服务器

  14. 14

    将数据从服务器发送到不带集合的客户端(使用Websocket)

  15. 15

    使用socket.io在服务器事件中将数据从服务器发送到客户端

  16. 16

    使用 TCP/IP 通信将随机生成的字节数组从客户端发送到服务器

  17. 17

    如何使用Websocket将Spark Streaming数据从服务器端发送到客户端?

  18. 18

    如何将数据从TCP Python服务器发送到客户端,反之亦然?

  19. 19

    如何将多个数据流从单个客户端发送到TCP服务器

  20. 20

    使用TCP c#将数据包从服务器发送到特定客户端

  21. 21

    服务器如何使用Java将消息发送到客户端

  22. 22

    Ruby如何通过TCP(http)服务器将图像发送到客户端

  23. 23

    如何在WinForm SIgnalR中单击按钮将数据从服务器发送到特定的客户端ID

  24. 24

    在python中使用HTTP将图像从服务器发送到客户端

  25. 25

    将数据从Python TCP套接字(作为服务器)发送到JS客户端

  26. 26

    如何在Node.js中将文件从服务器发送到客户端

  27. 27

    如何在python中将图片从服务器发送到客户端

  28. 28

    Spring Integration TCP服务器将消息发送到TCP客户端

  29. 29

    Angular2:发出请求时如何将数据从客户端发送到服务器

热门标签

归档