2

我正在编写一个套接字连接。服务器和客户端。服务器等待连接,socket.accept();然后可以处理所有传入的消息。

到目前为止一切顺利,但我该如何控制这些消息?目前,我只看到例如服务器需要某个消息,而客户端必须发送此消息。这可能是一条String信息。但是如果客户端发送另一个消息,例如一个Integer?如何让服务器期待不同的消息?并根据参数类型和参数个数,决定执行哪个方法?

或者一个套接字只是用于在客户端和服务器之间以众所周知的顺序交换消息?

特别是我正在寻找像在服务器端提供例如processInteger和方法的东西。getString()如果我从客户端发送消息,基于这些消息我想执行任何一个或其他方法。我可以通过客户端以某种方式控制消息发送到哪个方法吗?

4

3 回答 3

0

Unix 风格的套接字(如 Java 所使用的)不呈现传递结构化(“类型化”)数据的抽象。相反,它们代表任意字节流。唯一能说明这一点的是客户端和服务器就如何通信(协议)达成一致。正如您可能从文档中注意到的那样,实际从 Socket 中获取数据的唯一方法是使用 getInputStream(),它允许您读取(),它为您提供单个bytebyte[].

例如,如果客户端要发送 a String,也许它会将 'str' 作为消息的前三个字节,如果它是 an Integer,它是 'int',或者 'dbl'Double等等。如果服务器知道前三个字节表示数据的类型,那么它就能够使用它来确定如何读取消息的其余部分。这是基本上所有网络的基础——客户端和服务器使用相同的“语言”。

于 2012-08-06T20:16:53.567 回答
0

Java 教程页面很容易解释它:Java 教程:套接字

您可以发送可序列化对象发送它并在服务器上反序列化。当然,可序列化类必须在客户端和服务器中都定义。

您可以使用 ObjectInputStream 和 ObjectOutputStream 来读取和写入这些对象。

于 2012-08-06T20:20:14.673 回答
0

套接字连接用于传输您想要的任何类型的消息。消息的“原始”字节通过它发送。消息的格式不取决于套接字(字符数据——字符串、整数或其他类型的对象、二进制数据等);由你决定。消息(请求和响应)的顺序也由您定义。消息格式、顺序和其他行为一起被称为传输和/或消息“协议”。

您可以定义和实现自己的协议,也可以使用现有的协议,或协议的组合,例如 HTTP、RMI、XML、json 等。

祝你好运!汤姆

于 2012-08-06T20:22:13.293 回答