Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Client - Server, Запрос - Ответ


Автор: SerjogaVS 17.5.2010, 02:00
Здравствуйте,
мне надо для уни сделать лабораторную работу по java. Нужно создать простое client - server соединение и показать как они работают на примере online shop. Никакого php, ни вебсервера не надо, чисто ява. Client использует HttpURLConnection, а server сокеты.
Моя проблема в том, что не знаю как конкретно обрабатывать запросы и ответы при помощи GET, PUT, POST, DELETE.
Допустим я покупаю двд диск с номером 12345. Отправляю серверу эту информацию, сервер ее получает, кладет мой диск в корзину и говорит мне сколько элементов в моей корзине. 
Как я понимаю, тут надо использовать POST и передать в качестве параметра номер диска. Вот как я пытался это сделать:

Код

// Client
URL url = new URL("http://localhost:8060/");
HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setReadTimeout(1000);
connection.connect();
 BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(
                    connection.getOutputStream()));
String data = URLEncoder.encode("nomer", "UTF-8") + "="
                    + URLEncoder.encode("12345", "UTF-8");
wr.write(data);
wr.write("\n");
wr.flush();

reader = new BufferedReader(new InputStreamReader(connection
                    .getInputStream())); // В этом месте у меня зависает client
//////////////////////////////////////////////////////////
// Server
//
// Read a message sent by client application
//
BufferedReader reader = new BufferedReader(new InputStreamReader(socket
                    .getInputStream()));
String line;
while((line = reader.readLine()) != null) {
  System.out.println(line + "\n");
}
reader.close();


Как мне правильно на сервере получить передачу от клиента, как я проверю какая эта передача (GET, POST...) и как ему ответить?
Спасибо заранее.

Автор: AntonSaburov 17.5.2010, 12:20
Посмотреть тут - http://java.sun.com/docs/books/tutorial/networking/urls/index.html

И тут - http://java.sun.com/docs/books/tutorial/networking/sockets/index.html

Автор: SerjogaVS 17.5.2010, 21:11
Спасибо, думаю найду там то, что мне надо!

Автор: SerjogaVS 27.5.2010, 17:55
Так у меня и ничего не получилось :(
При чтении сервер зависает.  Чего не хватает?

// Client
Код

URL url = new URL("http://localhost:8060");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);

OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream());

String msg = "test";
wr.write(temp);
wr.write("\n");
wr.flush();
wr.close();

BufferedReader reader = new BufferedReader(new InputStreamReader(connection
                    .getInputStream()));
String inputLine;
            
while ((inputLine = reader.readLine())!= null)
      System.out.println(inputLine);
reader.close();


// Server
Код

Server serverSocket = new ServerSocket(8060);
Socket socket = serverSocket.accept();

BufferedReader reader;

reader = new BufferedReader(new InputStreamReader(socket
                    .getInputStream()));

String line = null;
while ((line = reader.readLine()) != null) {
    System.out.println(line + "\n");
    
reader.close();

Сервер читает всю информацию и слово test и на этом зависает, т.е. в reader.close() он даже не заходит. Может кто знает, что я не так делаю? 

Автор: Kircul 27.5.2010, 18:04
А обязятельно использовать HttpURLConnection? У апача есть такой проект http://hc.apache.org/httpclient-3.x/index.html (очень удобный API).

Автор: SerjogaVS 27.5.2010, 18:21
Цитата(Kircul @ 27.5.2010,  18:04)
А обязятельно использовать HttpURLConnection? У апача есть такой проект http://hc.apache.org/httpclient-3.x/index.html (очень удобный API).

да, к сожалению обязательно. Client - HTTPUrlConnection, Server - Socket.

Автор: SerjogaVS 27.5.2010, 20:59
в общем добился я чтобы сервер читал сообщение от клиента. 
заменил только это строку
Код

while ((line = reader.readLine()) != null) {
    System.out.println(line + "\n"); }

на эту
Код

while (reader.ready()) {
    System.out.println(reader.readLine() + "\n"); }


теперь я не могу отправить клиенту ответ... виснет теперь он при чтении  smile 
Может кто-нибудь пожалуйста помочь, время поджимает сильно....  smile 

Автор: SerjogaVS 29.5.2010, 09:20
спасибо всем, я разобрался. 

Автор: major32 22.6.2010, 08:26
В чем трабла то была ? отпишите .....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)