Java客户端/服务器实现

时间:2012-08-24 09:35:14

标签: java client-server

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

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

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

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

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

感谢任何帮助

3 个答案:

答案 0 :(得分:2)

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

最基本的方式(对于大学项目来说可能是一件好事,以及为了解整件事情......)将是服务器在ServerSocket上的Mainthread中监听请求以连接到服务器然后对于每个(正确的)请求(您需要以某种方式指定在这种情况下是正确的)启动一个连接到客户端的套接字的新线程。这个线程应该托管在某种List或服务器的Mainthread中的任何东西......

更新

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

这里有一些伪代码:

服务器中的

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

希望我帮到你,这有助于......

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

'简单'是一种主观的东西,取决于你已经拥有的经验。 如果您有Java相关技术方面的经验,那么您可以选择像Servlets,JSP和JQuery这样的技术堆栈,并使用GAE来简化您提到的“麻烦”方面。 GAE是一个平台即服务,所以你不必担心这些事情,因为谷歌负责身份验证,扩展等。如果你是这样的话,你也可以使用GAE和PHP。