有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

不同类之间的java函数调用

我有三个独立的类,分别是login。java,实时监控。java和HandleMultipleClient。JAVA以下是所有相应类的代码

登录。爪哇

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

HandleMultipleClient。爪哇

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

现场监控。爪哇

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

现在的问题是当我给hmc打电话时。MessageToSpecificClient(“192.168.1.102”、“应用程序”);它进入HandleMultipleClients类,只打印IP地址和应用程序,但不通过for循环。请告诉我我做错了什么


共 (1) 个答案

  1. # 1 楼答案

    您正在创建对象的实例,并在此处向其添加“客户端”:

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