0

我必须制作一个涉及客户端/服务器架构的大学项目。

应该有一个服务器,客户端可以登录并搜索或保存一些东西。

实现这样的东西的最佳方法是什么?

我认为可以使用 RMI 或 ServerSockets 甚至 WebServices 来完成,但是实现这个项目的最简单方法是什么?

使用 Web Sevrvices 我认为身份验证/会话处理可能会很麻烦,使用 ServerSockets 我已经完成了一些测试,其中我传递了一些自定义序列化对象,但在我看来这不是一个好方法。

任何帮助表示赞赏

4

3 回答 3

2

由于这是一个大学项目,我不会发布解决方案,但会给你一个好的方向。

最基本的方式(对于大学项目来说可能是一件好事,并且为了理解整个事情......)将是服务器在他的主线程中侦听 ServerSocket 上的请求以连接到服务器,然后为每个(正确)请求(您需要以某种方式指定在这种情况下什么是正确的)使用连接到客户端的套接字启动一个新线程。此线程应托管在某种列表中或服务器主线程中的任何内容中...

更新:

因此,如果此服务器为其客户端提供不同的功能,这当然是我们的服务器代码中的方法,您可以指定在新客户端连接时创建的对象(我从现在开始调用这些“ClientServerConnection”,并运行在它自己的线程中)以服务器对象传递给它的方式,因此,如果“ClientServerConnection”之一获得一个请求,他们可以调用服务器对象上的匹配方法并向客户端提供相应的响应...

这里有一些伪代码:

在服务器中:

//request for Connection came in 
ClientServerConnection csc = new ClientServerConnection(this, "and everything you need, at least client IP for connecting the socket");
csc.run(); //running in its own thread, of cause ClientServerConnection should extend Thread
connectionList.add(csc); //a list of the connections the Server holds

在客户端服务器连接中:

//A request to the use a functionality of the Server come in, in the easiest way you are sending a String, and than trying to match it here
if(recievedString=="doWhatever"){
Server server.doWhatever(); //calling the according method on the Server Object you passed by creation of the ClientServerConnection Object
//now return something to the client, according to whatever the Method did 
}else if(recievedString=="doSomethingElse"){
//same again, according to whatever the now requested method does
}else{
//the client requested something you do not provide, need some sort of handling here
}

希望我做对了,这会有所帮助...

于 2012-08-24T09:39:46.647 回答
0

我认为 RMI 是最简单的解决方案,因为您定义了所有接口并且不必关心用于通信的协议。

您还可以将 Web 服务与 SOAP 一起使用,它也是一个 RPC(远程过程调用)接口。

但是通过使用 Socket 和 ServerSocket,您将学习如何从头开始构建服务器/客户端软件,了解这一点非常重要(因为这是基础知识)。

于 2012-08-24T09:38:51.963 回答
0

“容易”是一个主观的东西,取决于你已经有什么经验。如果您有 Java 相关技术方面的经验,您可以选择像 Servlets、JSP 和 JQuery 这样的技术堆栈,并使用 GAE 使事情变得简单,避免您提到的“麻烦”方面。GAE 是一个平台即服务,因此您不必担心这些事情,因为 google 负责身份验证、缩放等。如果您喜欢的话,您也可以将 GAE 与 PHP 一起使用。

于 2012-08-24T09:40:12.937 回答