我正在尝试开发Java聊天服务器。我不知道更好的解决办法是做以下任何一种:
这种情况最好的方法是什么?
答案 0 :(得分:1)
如果您想开发支持UI的应用程序,建议您学习Serialization
。此外,您必须为每个客户端创建一个套接字,尤其是在Server
方面。服务器应该有线程,你可以调用client handler
来处理客户端的请求。查询数据库以检查收到的消息是没有意义的,但您可以将所有消息保存在数据库中。我的建议是,如果你打算使用数据库(我建议),用它来处理客户的注册过程。因此,每当客户端向服务器发送请求以进行登录时,线程将检查是否将检查该客户端是否已在数据库中拥有帐户。如果不是,您可以实现简单的注册表单。从逻辑上讲,每个客户端都有friend list
,您应该将它们保存在数据库中。
编辑:服务器将如下所示。
public class Server {
public static void main(String[] args) {
try {
ServerSocket s = new ServerSocket(8087);
System.out.println("Server Started");
while (true) {
Socket incoming = s.accept();
System.out.println(incoming.getInetAddress().getHostAddress() + " was connected!");
new ClientHandler2(incoming).start();
}
} catch (Exception e) {}
}
}
所以主要的一点是服务器永远不应该停止监听指定的端口。
客户端处理程序,它是在服务器端创建的线程。
public class ClientHandler extends Thread {
private Socket incoming;
public ClientHandler(Socket incoming){
this.incoming = incoming;
}
@Override
public void run(){}
Server会将初始化的套接字发送到ClientHandler的构造函数中,并调用start()
方法来运行它。
答案 1 :(得分:1)
实际上,您不必为每个客户保持永久连接!您所要做的就是存储客户端的状态服务器端,然后通过任何连接进行通信。然后,当您的客户端似乎暂时不活动时,您可以更加明智地使用它们。