Связь между моим Java-сервером и локальным клиентом - PullRequest
1 голос
/ 23 марта 2012

Я пишу простой Java-сервер. Я собираюсь развернуть этот код на сервере моего ученика и запустить его там.

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 ]

2 голосов
/ 24 марта 2012

REST - это очень простой и легкий способ связи между клиентом и сервером.REST в основном говорит, используйте HTTP так, как это было задумано, даже при обмене данными между компьютерными программами.

Прочтите HTTP, если у вас недостаточно знаний.Вот один хороший документ: http://www.jmarshall.com/easy/http/

Как только вы поймете, как отправлять и получать HTTP-сообщения на клиенте и на сервере, вы готовы разработать серверный API RESTful: s.

Что вам нужно знать о REST, так это то, что это в основном образ мышления при разработке вашего API.Убедитесь, что вы используете HTTP в полной мере и отправляете / получаете данные в любом формате (обычно это пары ключ / значение в формате JSON, XML или UrlEncoded).

Я бы сказал, что гораздо лучше сделать это самостоятельно, чем пытатьсяизучать Restlet или какую-то другую огромную библиотеку, в то же время вы изучаете REST.REST и HTTP - простые вещи - как только вы перейдете к «это просто какой-то текст, возвращающийся назад и четвертый».Когда вы полностью понимаете эти вещи, тогда вы можете взглянуть на некоторые фреймворки.

Вот некоторая информация о REST: http://rest.elkstein.org/

2 голосов
/ 23 марта 2012

Если вы пытаетесь предоставить сервис RESTFul с сервера, это не простая задача.Возможно, вам захочется использовать что-то вроде Restlet для начальной загрузки вашего сервера и клиента RESTFul.

Для получения дополнительной информации см. http://wiki.restlet.org/docs_2.0/13-restlet/21-restlet/318-restlet.html

...