我的Java服务器和本地客户端之间的通信

时间:2012-03-23 19:12:40

标签: java rest client communication

我一直在编写简单的Java Server。我要将这段代码部署到我学生的服务器上并在那里运行。

public class Demo {

    public static void main(String[] args) {

        String port = "50000";

        ServerAttributes attr = new ServerAttributes();
        attr.setPort(Integer.parseInt(port));

        Socket socket = null;
        ServerSocket serverSocket= null;

        try {
            serverSocket = new ServerSocket(attr.getPort());
            System.out.println("Waiting for accept...");

            while(true) {
                socket = serverSocket.accept();
                // TODO

                socket.close();
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

我想创建简单的客户端代码,它将与我的服务器“交谈”。通信客户端 - >服务器很简单。我的服务器对客户端可见。但是,如何以另一种方式提供沟通呢?

也许REST是好主意?那么,我如何“教”我的服务器来回答REST查询呢?

我有一段代码将数据发送到我的GAE服务器:

package enceladus.server.trash.rest;


import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

public class RESTGAEServer {
    static String httpAddress = "http://*********.appspot.com/sign";

    public static void main(String[] args) {
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(httpAddress);

        try {

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();


            nameValuePairs.add(new BasicNameValuePair("guestbookName", "default"));                     
            nameValuePairs.add(new BasicNameValuePair("content", "TEST"));

            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            @SuppressWarnings("unused")
            HttpResponse response = client.execute(post);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

提前致谢

2 个答案:

答案 0 :(得分:2)

如果您尝试从服务器提供RESTFul服务,这不是一件容易的事。您可能想要做的是使用Restlet来引导您的RESTFul服务器和客户端。

有关更多信息,请参阅http://wiki.restlet.org/docs_2.0/13-restlet/21-restlet/318-restlet.html

答案 1 :(得分:2)

REST是一种在客户端和服务器之间进行通信的简单方法。 REST基本上说,即使在计算机程序之间进行通信时,也要按照它的使用方式使用HTTP。

如果您没有足够的知识,请阅读HTTP。这是一份好文件:http://www.jmarshall.com/easy/http/

了解如何在客户端和服务器上发送和接收HTTP消息后,您就可以开发RESTful服务器API了。

您需要了解的有关REST的一点是,在设计API时,它通常是一种思考方式。确保充分利用HTTP并以任何格式发送/接收数据(通常是JSON,XML或UrlEncoded键/值对)。

我会说你自己做这件事要比在学习REST的同时学习Restlet或其他一些大型图书馆好多了。 REST和HTTP都是简单的东西 - 一旦你开始“它只是一些文本返回和第四”。当你完全理解这些事情时,你可以看一些框架。

以下是有关REST的一些信息: http://rest.elkstein.org/