我一直在寻找实现客户端/服务器应用程序GUI的正确方法。老实说,我没有找到任何有用的信息来解决这个问题。所以我做了一个简单的设计,想要告诉你,看到你们都在说。我想知道它是否正确,如果你可以改进或其他任何东西。这是 UML 和服务器端伪代码。我希望你能思考,批评和建议。抱歉打字错误。
我的UML:
伪代码
Gui Main Class
这是我们实例化类管理器客户端和服务器类的主类,我们将它们作为参数,客户端管理器实例,列表框(GUI组件)和侦听端口传递。
Class GUI_Main
{
ListBox messageList;
Server server;
ClientManager clientMng;
void init()
{
clientMng = new ClientManager();
}
void startServer()
{
server = new Server(messageList, clientMng, 5555)
}
void stopServer()
{
server.stopServer();
}
}
ClientManager
此类用于管理连接到我们服务器的客户端。
Class ClientManager
{
void addClient(Client client)
{
{ ... }
}
void removeClient(int Index)
{
{ ... }
}
void sendData(String data, int clientIndex)
{
{ ... }
}
}
服务器
此类用于接受新连接,还显示从客户端接收的消息并在ListBox(GUI组件)中显示它们
Class Server implements ClientEvents
{
ListBox messageList;
ClientManager clientMng;
Public Server(...)
{
{ ... }
}
void listenConnections()
{
{ ... }
Socket tempSocket = ssocket.accept();
Client client = new Client(self, tempSocket);
client.start();
clientMng.addClient(client);
{ ... }
}
void stopServer()
{
{ .... }
}
void onReceive(Client client, String data)
{
messageList.add(data);
}
}
ClientEvents
Interface ClientEvents
{
void onReceive(Client client, String data);
}
客户端
此类用于与客户端交互,发送/接收数据
Class Client
{
ClientEvents server;
Public Client( ... )
{
{ ... }
}
void ioMonitor()
{
{ ... }
String data = socket.readData();
server.onReceive(socket, data);
{ ... }
}
void sendData(String data)
{
{ ... }
}
}
提前致谢。问候。
答案 0 :(得分:2)
连接GUI-Server和GUI-ClientMgr都不好。
您可以将名称服务器用于服务器而不是服务器。这非常糟糕。
客户端事件未标记为接口。
服务器块应该具有简单的服务器名称。
在添加客户端时,我会在ClientManager中注册客户端侦听器。并在那里取消注册。您确定,它是服务器,谁需要客户端事件?