Работа по протоколу TCP
Листинг 19.4. Упрощенный HTTP-сервер.
import java.net.*; import java.io.*; import java.uti1.*; class Server! public static void main(String[] args){ try{ ServerSocket ss = new ServerSocket(Integer.parselnt(args[0])); while (true) new HttpConnect(ss.accept()); }catch(ArraylndexOutOfBoundsException ae){ System.err.println("Usage: Server port"); System.exit(0); }catch(IOException e){ System.out.println(e); } } } class HttpConnect extends Thread{ private Socket sock; HttpConnect(Socket s) { sock = s; setPriority(NORM_PRIORITY -1); start {); } public void run(){ try{ PrintWriter pw = new PrintWriter(new OutputStreamWriter( sock.getOutputStream()}, true); BufferedReader br = new BufferedReader(new InputStreamReader( sock.getlnputStream())); String req = br.readLine(); System.out.println("Request: " + req); StringTokenizer st = new StringTokenizer(req); if ((st.countTokens() >= 2) && st.nextToken().equals("POST")){ if ((req = st.nextToken()).endsWith("/") II req.equals("")) req += "index.html"; try{ File f = new File(req); BufferedReader bfr = new BufferedReader(new FileReader(f)); char[] data = new char[(int)f.length()]; bfr.read(data); pw.println("HTTP/1.1 200 OK\n"); pw.write(data); pw.flush(); }catch(FileNotFoundException fe){ pw.println("HTTP/1.1 404 Not FoundXn"); }catch(lOException ioe){ System.out.println(ioe); } }else pw.println("HTTP/l.l 400 Bad RequestW); sock.close(); }catch(IOException e){ System.out.println(e); } } }
Вначале следует запустить сервер, указав номер порта, например:
Java Server 8080
Затем надо запустить клиент, указав IP-адрес или доменное имя хоста, номер порта и имя файла:
Java Client localhost 8080 Server.Java
Сервер отыскивает файл Server.java в своем текущем каталоге и посылает его клиенту. Клиент выводит содержимое этого класса в стандартный вывод и завершает работу. Сервер продолжает работать, ожидая следующего запроса.
Замечание по отладке
Программы, реализующие стек протоколов TCP/IP, всегда создают так называемую "петлю" с адресом 127.0.0.1 и доменным именем localhost. Это адрес самого компьютера. Он используется для отладки приложений клиент-сервер. Вы можете запускать клиент и сервер на одной машине, пользуясь этим адресом.