Иллюстрированный самоучитель по Java



              

Работа по протоколу TCP - часть 2


1. Клиент посылает серверу запрос на получение файла строкой "POST filename HTTP/1.l\n\n", где filename — строка с путем к файлу на сервере.

2. Сервер анализирует строку, отыскивает файл с именем filename и возвращает его клиенту. Если имя файла filename заканчивается наклонной чертой /, то сервер понимает его как имя каталога и возвращает файл in-dex.html, находящийся в этом каталоге.

3. Перед содержимым файла сервер посылает строку вида "HTTP/1.1 code OK\n\n", где code — это код ответа, одно из чисел: 200 — запрос удовлетворен, файл посылается; 400 — запрос не понят; 404 — файл не найден.

4. Сервер закрывает сокет и продолжает слушать порт, ожидая следующего запроса.

5. Клиент выводит содержимое полученного файла в стандартный вывод System, out или выводит код сообщения сервера в стандартный вывод сообщений System, err.

6. Клиент закрывает сокет, завершая связь.

Этот протокол реализуется в клиентской программе листинга 19.3 и серверной программе листинга 19.4.

Листинг 19.3.

Упрощенный HTTP-клиент

import java.net.*;

import java.io.*;

import java.util.*;

class Client{

public static void main(String[] args){ 

if (args.length != 3){

System.err.println("Usage: Client host port file"); 

System.exit(0) ; 

}

String host = args[0];

int port = Integer.parselnt(args[1]); 

String file = args[2]; 

try{

Socket sock = new Socket(host, port);

PrintWriter pw = new PrintWriter(new OutputStreamWriter(

sock.getOutputStreamf)), true); 

pw.println("POST " + file + " HTTP/1.l\n"); 

BufferedReader br = new BufferedReader(new InputStreamReader(

sock.getlnputStream() ) ) ; 

String line = null; 

line = br.readLine();

StringTokenizer st = new StringTokenizer(line); 

String code = null;

if ((st.countTokens() >= 2) && st.nextToken().equals("POST")){ 

if ((code = st.nextToken()) != "200") {




Содержание  Назад  Вперед