0

我是 Java 套接字编程的新手,正在寻找一种通过 Java 套接字将命令或对象发送到服务器的好方法。对象应存储在服务器上,命令应从服务器请求数据。

起初服务器不知道他在输入流中收到了什么,所以他必须检查它,但我不知道该怎么做。我会获取输入流,将其转换为字符串,然后检查第一个字符以确定它们是否构成命令。我遇到的问题是 InputStream.toString() 返回类似 java.net.SocketInputStream@437d51a6

感谢您的意见和想法。

这是我的第一个坏方法:

 String input = inputStream.toString();  // this doesn't work
 String startString =  
   input.toString().substring(0, Math.min( input.toString().length(),3));

    if(startString.equals(COMMAND)){
    // process command, e.g. to request data from the server
    }
    else {
     // extract object to send data to the server
    }
4

3 回答 3

0

“简单”的文本命令没有任何问题。看看 SMTP 或 HTTP,它只是纯文本。

这样做有一个很好的理由:您可以telnet进入您的服务器,然后输入命令。这是一个很大的帮助,因为您可以在没有特殊客户端的情况下查询您的服务器。

远程登录到本地 Web 服务器的示例(我只是输入“GET /”)

$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
GET /
<html>


<body>
  <h1>Welcome  on xxx</h1>
</body>

</html>

Connection closed by foreign host.

此外,您的服务不分别与特殊语言或特殊二进制格式相关联。

于 2013-05-26T13:24:12.637 回答
0

一种方法可能是为数据类型和命令创建类。

然后,您可以使用 ObjectOutputStream ( http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html ) 的 writeObject 方法使用默认 Java 序列化将命令/数据发送到服务器(假设所需的类也存在于服务器类路径中)。

然后,服务器可以从 ObjectInputStream 中获取它们,并轻松地根据它们的类型采取行动。您必须从 Object 类型转换它们,但如果需要,您可以使用 .getClass() 或 instanceof 检查它们的真实类型。

于 2013-05-26T12:53:28.817 回答
0

我发现这是如何工作的。诀窍是将 inputStream 包装到 Scanner 对象中,如下所示:

Scanner s = new Scanner(inputStream);
String str = s.nextLine();
于 2013-05-26T15:45:39.673 回答