java socket发送和接收

时间:2013-05-18 10:53:45

标签: java sockets tcp duplex

几个小时以来我一直在考虑如何使用Java套接字来发送和接收数据。我希望你能帮我找到一个好办法。

我构建了一个服务器/客户端结构,客户端连接到服务器并获得自己的线程处理请求 - 响应方法。这些信息以XML格式封装。

在开始时,服务器启动阻塞套接字读取。首先,我使用writeInt()来传输XML消息的长度。之后,服务器读取长度字节数并解析消息。传输完成后,客户端进入接收状态并等待响应。

没关系,但在客户端进行身份验证后,服务器会等待即将发生的事情并阻塞。

但是当服务器没有需要传输的信息时,我该怎么办?我可以尝试销毁读取阻止并将消息发送给客户端。但是如果客户想到他还有一条消息并且也开始发送,会发生什么。在那一刻,没有人会听。

为此,也许我可以使用某种缓冲,但我觉得这不是我应该去的方式。

我一直在搜索并找到一些有趣的信息,但我对它们并不了解。可悲的是,我的书只是关于这个简单的套接字模型。

也许我应该使用两个线程。一个发送一个接收。服务器有一个数据库,用于存储消息并等待传输。因此,当服务器接收到消息时,他将该消息存储在数据库中,并且诸如“收到的消息”之类的答案也将存储在数据库中。发送方线程将查看是否有新消息并将“收到的消息”发送给客户端。这种方法不会在几毫秒内发送答案,但我可以想象它会运作良好。

我希望我能给你足够的信息,告诉我我在做什么。你会建议我如何实现这种沟通?

由于

1 个答案:

答案 0 :(得分:0)

  

但是,当服务器现在有需要传输的信息时,我该怎么办。

我会从服务器进行同步写入。这将允许您在一个线程中响应请求,但也可以根据另一个线程的要求发送其他消息。对于客户端,您可以使用单独的线程进行接收。

更简单的模型可能是有两个插座。一个套接字就像你现在一样工作,当你“登录”时,一个唯一的id被发送到客户端。此时,客户端打开第二个连接,其中有一个专用线程用于侦听异步事件。它传递唯一的id,以便服务器知道异步消息所针对的客户端。

这将为您提供一个简单的同步模式和一个简单的异步模式。唯一的缺点是你有两个插座连接,你可以协调它们。