"动态"用Java执行代码

时间:2014-08-28 23:25:04

标签: java sockets dynamic

当某个消息从套接字到达时,我希望执行预定义的Java代码(因此引号)。这样做的最佳方式是什么?我想解析消息,然后运行某种案例检查,但我认为可能有一种更简洁的方式来做同样的事情。

2 个答案:

答案 0 :(得分:2)

你可以通过很多方式实现这一目标。正如人们所说,你可以使用很多设计模式来实现,比如Builder。

但这是实现客户端的简单方法:

public class DateClient {

    public static void main(String[] args) throws IOException {
        String serverAddress = "ipAdress";
        Socket s = new Socket(serverAddress, 9090); // use the right port
        BufferedReader input
                = new BufferedReader(new InputStreamReader(s.getInputStream()));
        char answer = input.readLine().charAt(0);
        switch (answer) {
            case 'a':
                //do something for a
                break;
            case 'b':
                //do something for b
                break;
            case 'c':
                //do something for c
                break;
            default:
                System.out.println("No valid entry");
        }
        System.exit(0);
    }
}

从服务器读取包时需要验证,否则可能会抛出异常。

答案 1 :(得分:1)

它不是真的"动态"。你的意思是从套接字执行给定请求的命令?

建筑服务规则#1:清理所有输入。

出于这个原因,我会避免任何使用Reflection获取方法名称并以这种方式执行它们的方法。

基本上,您正在寻找一些逻辑来确定如何处理输入请求。

这可以通过多种方式完成。

  1. 在字符串名称上使用开关案例。
  2. 使用HashMap将String名称映射到通用接口(void run(Object input))
  3. 使用事件调度程序机制向侦听器发出输入请求的警报。
  4. 您决定如何实施这一点取决于您,并且取决于您的目标。

    您决定成为"消息"从套接字涉及格式化。我假设您正在格式化数据,以便接收方知道X字节的消息即将到来,因此只有在收到整个消息时才能对其进行缓冲和处理。

    套接字上的数据格式超出了本问题的范围。设计和构建RPC服务有很多资源。可能谷歌和你在一起。