将对象和命令发送到服务器

时间:2013-05-26 12:23:46

标签: java sockets networking tcp

我是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
    }

3 个答案:

答案 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();