Java客户机/服务器实现

Java客户机/服务器实现,java,client-server,Java,Client Server,我必须做一个涉及客户机/服务器架构的大学项目 应该有一个服务器,客户端可以登录、搜索或保存一些东西 实现这样的东西最好的方法是什么 我认为可以使用RMI或ServerSockets甚至Web服务来实现,但是实现这个项目最简单的方法是什么呢 使用Web服务我认为身份验证/会话处理会很麻烦,使用ServerSockets我做了一些测试,通过了一些自定义序列化对象,但在我看来这不是一个好办法 非常感谢您提供的任何帮助我认为RMI是最简单的解决方案,因为您定义了所有接口,不必关心用于通信的协议 您还可以

我必须做一个涉及客户机/服务器架构的大学项目

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

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

我认为可以使用RMI或ServerSockets甚至Web服务来实现,但是实现这个项目最简单的方法是什么呢

使用Web服务我认为身份验证/会话处理会很麻烦,使用ServerSockets我做了一些测试,通过了一些自定义序列化对象,但在我看来这不是一个好办法


非常感谢您提供的任何帮助

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

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


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

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

最基本的方法(对于一个大学项目来说,这可能是一件好事,对于理解整个问题来说……)是服务器在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
在ClientServerConnection中:

//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
}

希望我对你的理解是正确的,这对你有所帮助。

简单是一件主观的事情,取决于你已有的经验。
如果您在Java相关技术方面有经验,您可以选择Servlet、JSP和JQuery等技术堆栈,并使用GAE从您提到的“麻烦”方面简化事情。GAE是一个平台即服务,因此您不必担心这些事情,因为google负责身份验证、扩展等。如果您喜欢,您也可以将GAE与PHP结合使用。

同意,您将通过使用ServerSocket/Sockett了解更多关于客户机/服务器软件体系结构的信息。这与我测试的想法类似,但是我将如何处理不同的功能(保存/加载/搜索/ecc)?我需要为每个具有不同值的函数使用相同的序列化对象?这让我害怕,因为我不确定我是否理解正确,但我现在了解的是,您有一个服务器,它为注册的客户端提供不同的功能。我会更新答案