2014-01-25 3 views
0

Я пытаюсь реализовать шлюз, который получает команду от Клиента и выполняет его. Если Gateway получит команду SOPEN | 127.0.0.5 | 12998 | 5, он откроет канал (сокет) для сервера, у которого есть номер 127.0.0.5, и переадресует все сообщения, полученные от клиента на этот сервер. , например, если шлюз принимает сообщение MSG | 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); 
    } 

Класс 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) {} 

ответ

2

Сделать карту и всякий раз, когда клиент отправляет SOPEN команды добавить клиент InetAdress и InetAdress сервера в карту, теперь каждый раз, когда вы получаете новую команду, вы получите адрес сервера с карты.

Смежные вопросы