在多线程中共享变量

时间:2014-01-25 21:32:56

标签: java multithreading sockets

我尝试实现一个从客户端接收命令并执行它的网关。如果网关收到命令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) {}

1 个答案:

答案 0 :(得分:2)

制作地图,每当客户端发送SOPEN命令时,将此客户端InetAdress和服务器的InetAdress添加到地图中,现在无论何时收到新命令,您都将从地图中获取服务器地址。