使用套接字在聊天应用程序中发送/接收字符串以触发方法

时间:2018-06-22 17:30:04

标签: java sockets javafx chat

我有一个聊天应用程序,该应用程序将按下按钮时的字符串传递给文本文件。 为了使其在网络中工作,我考虑过让服务器运行时从另一个用户那里接收字符串,并使用一种方法将该字符串写入文件。

聊天应用程序完全是点对点的,因此没有实际的服务器在运行,也没有类似的东西。

最后,我希望两个用户基本上共享一个文本文件,即聊天内容。如果我要写一条消息,那么我的消息将写在本地文本文件中,而另一个用户将收到字符串(消息)并将其字符串附加到自己的文本文件中。

如果他写了一个字符串,他会将其附加到他的文本文件中,然后将该字符串发送给我,该字符串将附加到我的文本文件中。这样,我们“模拟”了一种服务器类型,该服务器记录了两个用户之间的聊天记录。

问题是我完全不知道如何使用套接字执行此操作,以及什么是最佳方法。

当前,我有一个使用以下方法触发文本文件写入的类:

        // Button Send Message
    view.btnSendMessage.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent arg0){
            String userInput = view.chatMessage.getText();
            // clears the chat history
            view.chatWindow.clear();
            try {
                model.writeNewChatMessage(user.getUserName() +  ": " + userInput);
            }
            catch (Exception e) {
                System.out.println("unable to send");
            }
            // sends textfield message to model method

            // updates view's chat history textarea
            view.updateChatHistory(model.getChatHistory());
            // clears textfield
            view.chatMessage.clear();
        }
    });

另一个类是我所有发生聊天逻辑的类,它实现Runnable并具有run()方法,该方法(当前)不执行任何操作。我尝试了几种方法,但似乎无法解决此问题。

1 个答案:

答案 0 :(得分:0)

程序的每个实例都需要一种将消息发布到其他实例(对等),并且还从其同级接收消息的方法。

您可以通过多播或TCP来做到这一点。

如果使用TCP,则需要具有一些用于发现对等方的机制,以便实例A可以连接到实例B的主机+端口。在这种情况下,您的程序将使用ServerSocket侦听传入的连接。

如果使用多播,则可以将聊天消息发布到多播组。您的进程可以订阅该组上的流量,并将消息写入本地文件。多播数据报有可能会丢失,但这可能适合您的用例。