【问题标题】:Java client/server application - how to get the input type from the server side?Java 客户端/服务器应用程序 - 如何从服务器端获取输入类型?
【发布时间】:2014-01-26 22:57:13
【问题描述】:

我目前正在开发一个简单的客户端/服务器应用程序,该应用程序从命令行接收单个输入。有效输入是整数或“r”。如果输入一个整数,则服务器应该将该整数的值添加并输出到所有先前的整数输入。如果输入 'r',服务器应该将输出值重置为 0。

在客户端,我得到以下代码来将不同的输入类型传递给服务器:

if (args[0].equalsIgnoreCase("r")) { 
    out.write("reset".getBytes());
} else {
    out.write(i); //i is an integer that was converted from args[0] using Integer.parseInt()
}

但是,在服务器端,我想确定它从客户端获得的输入类型。具体来说,有没有办法让服务器检查它是从客户端接收整数还是字节数组?

【问题讨论】:

  • 无论是来自 int 还是来自 string,字节看起来都是一样的。你需要让客户端告诉服务器它正在发送什么类型的数据。
  • 那我该怎么做呢?
  • 这取决于你。您可以发送类型的名称,或为每种类型分配一个编号。请务必考虑以后如何添加新类型。
  • 总之,写网络协议很难。

标签: java client-server inputstream outputstream


【解决方案1】:

我的建议是使用 ObjectStream 来输出变量或整数。您可以使用 ObjectInputStream 上的 readObject() 方法来读取对象,并使用 getClass 或 instanceOf 来确定它的实例。

例如: 对象 o = objectInputStream.readObject(); if (o instanceof String) { System.out.println("这是一个字符串!"); } else if(o instanceof Integer) { System.out.println("它是一个整数"); }

请注意,您可能需要发送 Integer 而不是 int。如果您发送一个 int,那么使用 readInt() 方法将读取一个 int,但由于您不知道接下来要获取的是 int 还是 String,所以您不能真正做到这一点。

在这种情况下,我之前所做的是先发送一个已知的东西,然后再发送一个未知的东西。例如,解释下一步是什么的枚举或字符串。因此,您可以为字符串发送“S”或为 int 发送“I”。这可能比只说 out.writeObject(Integer.valueOf(i)) 困难得多

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多