Java 聊天UDP客户端/服务器程序

Java 聊天UDP客户端/服务器程序,java,client-server,Java,Client Server,你好,我正在尝试创建一个客户端/服务器聊天程序。 我有三个客户端和一个服务器,当一个客户端向服务器发送一些字符串时,服务器将把这个字符串发送给其他客户端。 我已经创建了客户端向服务器发送数据的部分,但我不知道如何将接收到的数据从客户端发送到其他客户端 这是我创建的代码: 对于服务器: import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public clas

你好,我正在尝试创建一个客户端/服务器聊天程序。 我有三个客户端和一个服务器,当一个客户端向服务器发送一些字符串时,服务器将把这个字符串发送给其他客户端。 我已经创建了客户端向服务器发送数据的部分,但我不知道如何将接收到的数据从客户端发送到其他客户端

这是我创建的代码:

对于服务器:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;



public class Server {

    private static DatagramSocket serverSocket;

    public Server() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws Exception {

        serverSocket = new DatagramSocket(1111);
        byte[] receiveData = new byte[1024];
        byte[] sendData = new byte[1024];
        while(true)
           {
              DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
              serverSocket.receive(receivePacket);
              String s = new String( receivePacket.getData());
              System.out.println("Client dit : " + s);
              InetAddress IPAddress = receivePacket.getAddress();
              boolean found = false;
              int port = receivePacket.getPort();
              sendData = s.getBytes();
           }

    }

}
对于客户端:(X是客户端的数量:client1/client2…)


现在还不清楚你的聊天应该如何进行。 但向前推进的最简单想法是:

  • 服务器应保留收到的最新邮件数(X)。还可以存储收到每条消息的时间
  • 每次客户端连接到服务器时,服务器都会向其发送X条最新消息

  • 您可以在客户端连接到服务器时将其地址保存在服务器中,然后,每次客户端向服务器发送新消息时,都将该消息发送给其他客户端

    您还可以使用多播。使客户端加入一个多播地址,并将新消息从服务器发送到该地址。这样,您就不需要保存地址,每个客户端都可以“监听”消息


    请参见和

    对于UDP,您必须具有服务器->服务器关系,因为UDP不是双向的。当然,您可以用黑客攻击它,但您没有指定为什么不能使用更合适的TCP。这里没有实际问题。此外,如果您使用多播,您应该知道它仅适用于LAN上的主机。@Ofiratia这是不正确的。只要两台主机之间的所有路由器都允许,它就可以在任意两台主机之间工作。
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    
        public class ClientX {
    
          public ClientX() {
            // TODO Auto-generated constructor stub
          }
    
          /**
           * @param args
           * @throws IOException 
           */
          public static void main(String[] args) throws Exception {
    
            BufferedReader inFromUser =
                     new BufferedReader(new InputStreamReader(System.in));
                  DatagramSocket clientSocket = new DatagramSocket();
                  InetAddress IPAddress = InetAddress.getByName("localhost");
                  System.out.println("Connécté au serveur !");
                  byte[] sendData = new byte[1024];
                  byte[] receiveData = new byte[1024];
                  System.out.print("Ecrire un message: ");
                  String s = inFromUser.readLine();
                  sendData = s.getBytes();
                  DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 1111);
                  clientSocket.send(sendPacket);
                  DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                  clientSocket.receive(receivePacket);
                  String message = new String(receivePacket.getData());
                  System.out.println(message);
                  clientSocket.close();
    
          }
    
        }