我有一个聊天应用程序,该应用程序将按下按钮时的字符串传递给文本文件。 为了使其在网络中工作,我考虑过让服务器运行时从另一个用户那里接收字符串,并使用一种方法将该字符串写入文件。
聊天应用程序完全是点对点的,因此没有实际的服务器在运行,也没有类似的东西。
最后,我希望两个用户基本上共享一个文本文件,即聊天内容。如果我要写一条消息,那么我的消息将写在本地文本文件中,而另一个用户将收到字符串(消息)并将其字符串附加到自己的文本文件中。
如果他写了一个字符串,他会将其附加到他的文本文件中,然后将该字符串发送给我,该字符串将附加到我的文本文件中。这样,我们“模拟”了一种服务器类型,该服务器记录了两个用户之间的聊天记录。
问题是我完全不知道如何使用套接字执行此操作,以及什么是最佳方法。
当前,我有一个使用以下方法触发文本文件写入的类:
// 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()方法,该方法(当前)不执行任何操作。我尝试了几种方法,但似乎无法解决此问题。
答案 0 :(得分:0)
程序的每个实例都需要一种将消息发布到其他实例(对等),并且还从其同级接收消息的方法。
您可以通过多播或TCP来做到这一点。
如果使用TCP,则需要具有一些用于发现对等方的机制,以便实例A可以连接到实例B的主机+端口。在这种情况下,您的程序将使用ServerSocket侦听传入的连接。
如果使用多播,则可以将聊天消息发布到多播组。您的进程可以订阅该组上的流量,并将消息写入本地文件。多播数据报有可能会丢失,但这可能适合您的用例。