我是Java套接字编程的新手,正在寻找一种通过Java套接字将命令或对象发送到服务器的好方法。对象应存储在服务器上,命令应从服务器请求数据。
首先,服务器不知道他在输入流中收到了什么,所以他必须检查它,但我不知道该怎么做。我将获取输入流,将其转换为String,然后检查第一个字符以确定它们是否形成命令。我遇到的问题是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
}
答案 0 :(得分:0)
一种方法可能是为数据类型和命令创建类。
然后,您可以使用ObjectOutputStream(http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html)的writeObject方法使用默认的Java序列化将命令/数据发送到服务器(假设所需的类也存在于服务器类路径中)。
然后,服务器可以从ObjectInputStream中获取它们,并根据其类型轻松执行操作。您必须从Object类型转换它们,但如果需要,可以使用.getClass()或instanceof检查它们的实际类型。
答案 1 :(得分:0)
“简单”文本命令没有任何问题。看看SMTP或HTTP,它只是纯文本。
并且有一个很好的理由:您可以 telnet 进入您的服务器,并输入命令。这是一个很好的帮助,因为您可以在没有特殊客户端的情况下查询服务器。
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.
此外,您的服务不再依赖于特殊语言或特殊二进制格式。
答案 2 :(得分:0)
我已经发现它是如何工作的。诀窍是将inputStream包装成Scanner对象,如下所示:
Scanner s = new Scanner(inputStream);
String str = s.nextLine();