套接字连接 - 消息顺序?

时间:2012-08-06 20:10:01

标签: java sockets

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

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

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

特别是我正在寻找在服务器端提供例如processIntegergetString()方法的方法。如果我从客户端发送消息,基于这些消息,我想执行其中一种方法或其他方法。 我能以某种方式通过客户端控制消息的方法吗?

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

Java教程页面解释非常简单:Java Tutorials: Sockets

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

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

答案 2 :(得分:0)

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

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

祝你好运! 汤姆