【问题标题】:Passing multiple types of related variables(Java)传递多种类型的相关变量(Java)
【发布时间】:2016-06-06 19:24:10
【问题描述】:

我正在开发一个应用程序,它可以连接到本地网络上的几台计算机并向它们发送指令,例如:“运行此脚本”、“运行该脚本”并阻止与它的新连接,直到它们完成运行脚本。

简而言之,我为每个连接创建一个线程,我需要将端口、IP、指令、持续时间、线程名称传递给它们。然后线程创建套接字并通过流指令和持续时间传递。另一端的计算机然后确认它收到了指令并执行了脚本。然后程序应该阻止任何尝试与该 IP 地址创建连接,直到客户端回答他完成运行脚本但将允许连接到未连接的计算机。然后线程关闭流、套接字和自身,并允许通过新线程与该计算机建立新连接。

现在我的问题是我不知道如何创建一个可以扩展的系统,例如。将新计算机添加到系统、脚本和持续时间值。

我尝试过这样的事情:

        object[0][0] = 2222;                  //PORT
        object[0][1] = "localhost";
        object[0][2] = " to computer1";

        object[1][0] = 2223;
        object[1][1] = "192.168.1.113";
        object[1][2] = " to computer2";

        object[2][0] = 2224;
        object[2][1] = "192.168.1.108";
        object[2][2] = " to computer3";

但是,如果我想向计算机 1 和计算机 3 发送相同或不同的指令,我无法找到一种迭代的方法。

【问题讨论】:

  • 你考虑过上课吗?对象数组是相当笨拙的,而Java 毕竟是面向对象的。
  • 你正在做线程,但将数据保存在二维数组而不是真实对象中。您是否跳过了 Java 的基础知识?
  • 我真的忘记上课了,谢谢。
  • 将有关“任务”的数据 - ip、端口和有效负载封装到一个类 ( POJO ) 中。让Class实现“runnable”接口,实现run()方法,打开socket,发送指令,等待回复,完成后将结果放入Task对象。然后查看 java.util.concurrent.ExecutorService 类,它可以帮助您运行任何给定的任务,只需在实例化 ExecutorService 后调用它的“submit(Runnable)”方法。然后你需要管理哪些任务被发送到执行器。有点高级但相当标准的 java 东西。
  • 这似乎比我所做的要干净得多。谢谢。

标签: java arrays multithreading sockets variables


【解决方案1】:

正如pjklauser 所说,你可以从简单的 POJO 类 Config 开始,例如:

import java.util.ArrayList;

public class Config{

private String host;
private int port;
private String payload;

public Config(String host, int port, String payload){
    this.host = host;
    this.port = port;
    this.payload = payload;
}

public String getHost() {
    return host;
}

public void setHost(String host) {
    this.host = host;
}

public int getPort() {
    return port;
}

public void setPort(int port) {
    this.port = port;
}

public String getPayload() {
    return payload;
}

public void setPayload(String payload) {
    this.payload = payload;
}

@Override
public String toString(){
    return this.host + " " + this.port + " " + this.payload;
}

 public static void main(String []args){
     ArrayList<Config> configs = new ArrayList<Config>();
     Config c1 = new Config("localhost", 2222, "To computer1");
     Config c2 = new Config("localhost", 2223, "To computer2");

     configs.add(c1);
     configs.add(c2);

     for (Config c: configs){
         System.out.println(c.toString());
     }
 }
}

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2014-06-20
    • 2023-03-08
    • 1970-01-01
    • 2019-03-12
    • 2014-04-17
    • 2012-04-17
    • 2017-09-15
    • 1970-01-01
    • 2012-11-19
    相关资源
    最近更新 更多