我尝试实现一个从客户端接收命令并执行它的网关。如果网关收到命令SOPEN | 127.0.0.5 | 12998 | 5,他将打开一个到具有ip 127.0.0.5的服务器的通道(套接字),并将从客户端收到的所有消息转发到该服务器。 例如,如果网关收到消息 味精| 127.0.0.1 | 12998 | 127.0.0.3 | 12897 | blablabla 如果一个频道被打开,他会将blablabla转发给服务器,否则他就不会这样做。 我的问题是,如果具有IP地址X的客户端打开一个频道,另一个IP地址为Y的客户端也可以使用该频道。网关是usnig多线程,每个客户端都在一个线程中运行,那么如何检查另一个客户端是否已经打开了到服务器的通道?
public static void main(String args[]) {
try {
DatagramSocket serverSocket = new DatagramSocket(12890);;
while (true) {
ChildServer cServer = new ChildServer(serverSocket);
cServer.start();
}
} catch (IOException ex) {
System.out.println(ex);
}
Class ChildServer
public void run() {
while(true)
{
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
try
{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
socket.receive(receivePacket);
String sentence = new String( receivePacket.getData());
System.out.println("RECEIVED:// " + sentence);
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
} catch (IOException e) {}
答案 0 :(得分:2)
制作地图,每当客户端发送SOPEN命令时,将此客户端InetAdress和服务器的InetAdress添加到地图中,现在无论何时收到新命令,您都将从地图中获取服务器地址。