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