2016-04-29 13 views
0

私は、login.java、LiveMonitoring.java、およびHandleMultipleClients.javaという3つの別々のクラスを持っています。以下の私は、HMCを呼び出すときに、すべてのそれぞれのクラス異なるクラス間での関数呼び出し

Login.java

try 
      { 
       serverSock = new ServerSocket(2101); 
       while (true) 
       { 
        sock = serverSock.accept(); 
        HandleMultipleClients hmc=new HandleMultipleClients(); 
        hmc.Connect(sock); 
       } 

のコードHandleMultipleClients.java

public class HandleMultipleClients 
{ 
    Map<Integer, java.net.Socket> clients = new HashMap<Integer, java.net.Socket>(); 
    Socket soc; 
    ServerSocket serverSock; 
    DataOutputStream dos; 
    DataInputStream dis; 
    public HandleMultipleClients() 
    { 

    } 
    public void Connect(Socket sock) 
    { 
     soc=sock; 
     clients.put(soc.getPort(), soc); 
    } 
    public void messagetospecificclients(String ipaddress,String choice) throws IOException, InterruptedException 
    { 
     System.out.print(ipaddress+"\n"+choice); 
     for (Iterator<Integer> iter = clients.keySet().iterator(); iter.hasNext();) 
     { 
      System.out.print("ok1"); 
      int key = iter.next(); 
      java.net.Socket client = clients.get(key); 
      InetAddress zee = client.getInetAddress(); 
      String s = zee.getHostAddress(); 
      System.out.print(s); 
      if (zee.getHostAddress().equals(ipaddress)) 
      { 
       System.out.print("ok2"); 
       dos =new DataOutputStream(client.getOutputStream()); 
       dos.writeUTF(choice); 
      } 

LiveMonitoring.java

HandleMultipleClients hmc=new HandleMultipleClients(); 
     try 
     { 
      hmc.messagetospecificclients("192.168.1.102","apps"); 
     } 

は今問題があるさ.messagetospecificclients( "192.168.1.102"、 "apps");それはHandleMultipleClientsクラスに行き、IPアドレスとアプリだけを印刷しますが、forループを経由していません。私が間違っていることを教えてください。

+0

をLiveMonitoringで作成した 'HandleMultipleClients'は、クライアントマップに何もありません。 – azurefrog

+0

しかし、私はログインの.javaで接続を呼び出すので、クライアントをリストに格納する必要があります。その後、forループをたどって、LiveMonitoringクラス@azurefrogを通してそのクライアントにアクセスしてください。 –

+0

'Login.java'と' LiveMonitoring.java 'お互いに関係がありますか? HandleMultipleClientsのインスタンスに「クライアント」を追加しているようですが、別のインスタンスからそれらを使用しようとしていますか?その2番目のインスタンスには「クライアント」はありません。これは前の行で作成されたもので、 '.Connect()'は決して呼び出されませんでした。 – David

答えて

1

あなたは、オブジェクトのインスタンスを作成し、ここに「クライアント」を追加している:

HandleMultipleClients hmc=new HandleMultipleClients(); 
hmc.Connect(sock); 

をしかし、あなたはそのインスタンス上messagetospecificclients()を呼び出すことはありません。

その後、あなたは別のインスタンスを作成し、ここでそのメソッドを呼び出します。

HandleMultipleClients hmc=new HandleMultipleClients(); 
try 
{ 
    hmc.messagetospecificclients("192.168.1.102","apps"); 
} 

しかし、あなたはインスタンスがそれにクライアントを追加することConnect()と呼ばれることはありません。

(同じように、2台の同じ車があるとします。同じモデル、同じモデルが同じ生産ラインから外れています。あなたはそれらの車にガスを入れました。他の1しかし、それはそれでガスを持っていないので、あなたは、することはできません)に設定された値がある場合に

コールmessagetospecificclients():。。あなたは上の接続を呼び出すことはありません

HandleMultipleClients hmc=new HandleMultipleClients(); 
hmc.Connect(sock); 
try 
{ 
    hmc.messagetospecificclients("192.168.1.102","apps"); 
} 
関連する問題