不同类别之间的函数调用

问题描述:

我有三个独立的类,分别是login.java,LiveMonitoring.java和HandleMultipleClients.java。以下是所有各个类的代码不同类别之间的函数调用

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"); 
     } 

现在的问题是,当我打电话HMC .messagetospecificclients( “192.168.1.102”, “应用程序”);它转到HandleMultipleClients类,只是打印IP地址和应用程序,但它不通过for循环。请告诉我我做错了什么。

+0

你永远不会调用连接上在LiveMonitoring中创建的'HandleMultipleClients',所以它的客户端映射中没有任何东西。 – azurefrog

+0

但我已经叫只需运动通过for循环连接中登录的.java所以应该在客户端存储在一个列表,然后我应该通过LiveMonitoring类访问客户端@azurefrog –

+0

什么'Login.java'和'LiveMonitoring.java “必须互相处理?它看起来像你将“客户”添加到'HandleMultipleClients'的一个实例,但然后尝试从另一个实例使用它们?那第二个例子没有任何“客户”。它只是在前一行创建的,'.Connect()'从未被调用过。 – David

正在创建的对象的实例,在这里增加一个“客户”来了:

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

但你永远不会调用messagetospecificclients()在该实例。

然后创建另一个实例并调用这里方法:

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

但你从来没有所谓的Connect()实例客户端添加到它。 (作为一个比喻...想象一下,你有两辆相同的汽车,同样的车型,同一型号,从同一条生产线上出来,你把汽油放在其中一辆汽车上,而你试图驾驶。其他人,但你不能,因为它没有气的话)的情况下

呼叫messagetospecificclients()其中有已设置的值:

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