2011-11-26 60 views
0

我正在制作一个应用程序,其工作方式与实时聊天非常相似。用户会不断写作,让我们说一个文本区域,并将消息发送给其他用户。在通信班上,我设立了一个接收器。当某人的消息到达客户端时,将调用receive方法并获取消息。我不明白的是代码将如何执行。如果在用户输入/发送消息时调用接收消息,会发生什么?我需要做什么才能使其正常工作? 希望这个问题很清楚。处理Java Interupts

ps:我仍然处于设计阶段,这就是为什么我没有测试它看看会发生什么。 atm我只使用第二个线程来接收调用接收方法的消息。

+0

你能描述一下“用户在输入/发送信息时”的含义吗?这是一个控制台模式程序吗?如果它是一个GUI程序,那么你将使用某种事件驱动的框架,所以没有“while”。您只需获取用户按键事件,然后决定如何处理每个事件。 –

回答

0

应该没有问题。

当某人的消息到达客户端时,将会调用接收方法 并将获得该消息。我不明白的是 代码将如何执行?

您应该有一个Receiver类来封装套接字(从中接收数据)并保留一组侦听器(请参阅Observer pattern)。 GUI可以是听众之一。当通过套接字接收到消息时,您需要通过转发收到的数据来通知所有听众。这样,你就有了一个干净而好的方式来通知GUI关于新消息的到达。

如果在用户输入/发送消息时调用接收消息 会发生什么?

这取决于你使用的IP协议的类型,但一般你不必担心这个,虽然我建议你使用lock机制保护您的插座。

我需要做些什么才能使其正常工作? 这里是一个很好的example,可以给你一些启发:)

编辑:至于你的问题关于执行流程,发送和接收都可以在同一时间发生两个不同且不相关的操作。这可以通过在两个不同的线程中实现发送和接收操作来实现。这是一个article套接字通信和多线程。

+0

我主要关心的是执行流程会发生什么。例如,当应用程序正在发送消息的过程中,并且接收方法被调用时,将停止发送消息并显示新消息,然后发送继续或将发送消息并显示新消息以后还是会让应用程序崩溃并得到一些异常? – Giannis

+0

刚刚编辑我的答案,请看看它。 – GETah

+0

感谢您的回复。我还有最后一个问题。是否有可能这样做:收到消息时,应用程序停止任何操作,用新消息更新GUI或任何必须完成的操作,然后返回到之前的操作。我在(客户端 - 服务器)之前使用线程完成了一些编程,但没有太复杂。再次感谢 ! – Giannis

0

您应该执行传统Java EE应用程序服务器所做的操作,即为每个传入消息分配一个单独的线程,或尝试沿着Netty的线路尝试Java NIO解决方案。

+0

传入消息将被简单地读取并发送到正确的面板以显示它们。将显示传入消息的同一个面板将接收要发送消息的输入。此操作需要两个线程? – Giannis