Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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 如何在两个UDP客户端之间发送消息?_Java_Networking_Udp - Fatal编程技术网

Java 如何在两个UDP客户端之间发送消息?

Java 如何在两个UDP客户端之间发送消息?,java,networking,udp,Java,Networking,Udp,我想做的是让第二组客户相互交流。因此,如果两个客户端连接,它们只能相互通信,如果第三个客户端连接,它将无法与其他两个客户端通信,但它将创建另一组2个客户端,以此类推。。。现在,如果一个客户端发送一条消息,它会将其发送给所有客户端,但我不知道如何让它们以2人一组的方式进行通信,就像在点对点连接中一样 class Server { private static DatagramSocket socket = null; private static Map<Session, Integer

我想做的是让第二组客户相互交流。因此,如果两个客户端连接,它们只能相互通信,如果第三个客户端连接,它将无法与其他两个客户端通信,但它将创建另一组2个客户端,以此类推。。。现在,如果一个客户端发送一条消息,它会将其发送给所有客户端,但我不知道如何让它们以2人一组的方式进行通信,就像在点对点连接中一样

class Server {

private static DatagramSocket socket = null;

private static Map<Session, Integer> sessions = new HashMap<Session, Integer>();

private static Session session = new Session();

public static void main(String[] args) {

     
    try {
        socket = new DatagramSocket(6066);

    } catch (SocketException e) {

        System.out.println("[SERVER] Unable to launch server on port: " + socket.getLocalPort());
    }

    System.out.println("[SERVER] Server launched successfully on port " + socket.getLocalPort());

    Thread thread = new Thread(new Runnable() {

        @Override
        public void run() {

            byte[] buffer = new byte[100];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

            while (true) {
                Arrays.fill(buffer, (byte) 0);
                try {
                    socket.receive(packet);
                } catch (IOException e) {
                    System.out.println("[SERVER] Unable to receive packets from buffer");
                }

                InetAddress ip = packet.getAddress();
                int port = packet.getPort();
                String data = new String(packet.getData()).trim();
                
                
                if(session.getIp1() == null) {
                    session.setIp1(ip);
                    session.setPort1(port);
                    session.setData1(data);
                    
                } else {
                    session.setIp2(ip);
                    session.setPort2(port);
                    session.setData2(data);
                    
                }
                

                DatagramPacket pt = new DatagramPacket(packet.getData(), packet.getData().length, ip, port);

                try {
                    socket.send(pt);
                } catch (IOException e) {
                    System.out.println("[SERVER] Unable to send packets to client.");
                }

            }

        }
    });
    thread.start();
    
}
}
对象类:

public class Session {

private InetAddress ip1;
private int port1;
private String data1;

private InetAddress ip2;
private int port2;
private String data2;

public Session() {
    
}

public InetAddress getIp1() {
    return ip1;
}

public void setIp1(InetAddress ip1) {
    this.ip1 = ip1;
}

public int getPort1() {
    return port1;
}

public void setPort1(int port1) {
    this.port1 = port1;
}

public String getData1() {
    return data1;
}

public void setData1(String data1) {
    this.data1 = data1;
}

public InetAddress getIp2() {
    return ip2;
}

public void setIp2(InetAddress ip2) {
    this.ip2 = ip2;
}

public int getPort2() {
    return port2;
}

public void setPort2(int port2) {
    this.port2 = port2;
}

public String getData2() {
    return data2;
}

public void setData2(String data2) {
    this.data2 = data2;
}




}

目前,您将客户机的信息存储在一个数组中。创建一个包含两个客户端会话数据的对象。当新客户端尝试连接时,查看是否有任何对象具有空闲位置,如果没有,则创建一个新对象并等待新参与者;否则,请加入现有会话


Hackish方法:创建一个映射,然后根据userCounts=1进行筛选,然后将会话加入到第一个返回的对象。

那么当你说要创建一个对象时,你的意思是该对象类应该包含2个inetAddress和2个端口吗?我已经更新了代码并添加了一个对象类。你能检查一下服务器部分吗?我也不知道如何让他们在两个客户之间交流。请不要通过破坏你的帖子为其他人做更多的工作。通过在Stack Exchange网络上发布,您已授予Stack Exchange在下不可撤销的权利,以分发该内容(即,无论您未来的选择如何)。根据堆栈交换策略,帖子的非破坏版本是分发的版本。因此,任何故意破坏行为都将恢复原状。如果您想了解有关删除帖子的更多信息,请参阅:
public class Session {

private InetAddress ip1;
private int port1;
private String data1;

private InetAddress ip2;
private int port2;
private String data2;

public Session() {
    
}

public InetAddress getIp1() {
    return ip1;
}

public void setIp1(InetAddress ip1) {
    this.ip1 = ip1;
}

public int getPort1() {
    return port1;
}

public void setPort1(int port1) {
    this.port1 = port1;
}

public String getData1() {
    return data1;
}

public void setData1(String data1) {
    this.data1 = data1;
}

public InetAddress getIp2() {
    return ip2;
}

public void setIp2(InetAddress ip2) {
    this.ip2 = ip2;
}

public int getPort2() {
    return port2;
}

public void setPort2(int port2) {
    this.port2 = port2;
}

public String getData2() {
    return data2;
}

public void setData2(String data2) {
    this.data2 = data2;
}




}