私は、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ループを経由していません。私が間違っていることを教えてください。
をLiveMonitoringで作成した 'HandleMultipleClients'は、クライアントマップに何もありません。 – azurefrog
しかし、私はログインの.javaで接続を呼び出すので、クライアントをリストに格納する必要があります。その後、forループをたどって、LiveMonitoringクラス@azurefrogを通してそのクライアントにアクセスしてください。 –
'Login.java'と' LiveMonitoring.java 'お互いに関係がありますか? HandleMultipleClientsのインスタンスに「クライアント」を追加しているようですが、別のインスタンスからそれらを使用しようとしていますか?その2番目のインスタンスには「クライアント」はありません。これは前の行で作成されたもので、 '.Connect()'は決して呼び出されませんでした。 – David