1 Podstawy programowania
sieciowego
TCP/IP
Warstwa transportowa
• TCP – protokółłłł połąłąłąłączeniowy gwarantująąąący niezawodne przekazywanie danych mięęędzy ę dwoma komputerami.
• UDP – protokół bezpołączeniowy dostarczający usługi zawodnego przekazywania niezaleŜnych pakietów danych między dwoma komputerami. Brak pewności dostarczenia pakietu jak równieŜ ich kolejności.
Porty
• Z reguły komputer posiada jedno fizyczne połączenie z siecią (adapter sieciowy) i wszystkie dane skierowane do tego komputera napływają przez to połączenie.
Dane te są jednak z reguły przeznaczone dla róŜnych programów działających na tym komputerze. Adresowanie danych do konkretnej aplikacji odbywa się za pomocą portów.
Dostarczanie pakietów
Aplikacje serwerowe
• Aplikacje serwerowe wiąŜą swoje punkty przyłączeniowe do określonych portów.
Numery portów od 0 do 1023 są zarezerwowane dla “dobrze zdefiniowanych usług” (well-known service) takich jak np. HTTP lub FTP. We własnych programach nie naleŜy uŜywać tych portów
Interfejs sieciowy Java
• Interfejs sieciowy w Javie obejmuje następujące klasy z pakietu java.net: URL, URLConnection, Socket, and
ServerSocket (TCP),
DatagramSocket, MulticastSocket (UDP)
2 URL Uniform Resource Locator
• nazwę (adres) komputera w sieci,
• nazwę pliku,
• numer portu
• i ewentualnie odnośnik do oznaczonej pozycji w pliku.
Obiekt URL
• URL gamelan = new URL("http://www.gamelan.com/");
• URL gamelan = new URL("http", "www.gamelan.com", 80,
"pages/Gamelan.network.html");
Operacje na obiekcie URL
• Metoda openStream()obiektu URL zwraca strumień InputStream poprzez który moŜna odczytywać zawartość dokumentu wskazywanego przez ten obiekt. Jeśli interakcja nie ogranicza się jedynie do odczytu dokumentu naleŜy wywołać metodę openConnection(), którazwraca obiekt typu URLConnection
Przykłłłład
• Fragment kodu współpracujący z serwletem realizującym pomiar napięcia stałego na wyjściu obiektu badanego przy zadeklarowanym napięciu wejściowym. Serwlet wykonuje trzy operacje:
open – która rezerwuje źródło napięcia stałego i multimetr, close- która zwalnia te zasoby oraz doOneCycle – która ustala na wyjściu źródła podane napięcie, mierzy odpowiedź badanego układu za pomocą multimetru oraz zwraca zmierzone wartości napięcia wejściowego i wyjściowego.
Kod
URL url = new
URL(“http://pc7e1.kmeif.pwr.wroc.pl:8080/examples/s ervlet/ExperimentServlet”);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
PrintWriter out = new
PrintWriter(connection.getOutputStream());
out.print(”doOneCycle” + 11.35); out.close();
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String uis = in.getLine();
...
Gniazdka (sockets)
• Klasy URLi URLConnection dostarczają wygodnych wysokopoziomowych mechanizmów komunikacyjnych, jednak w wielu
zastosowaniach zachodzi potrzeba programowania na poziomie gniazdek tj.
podstawowych usług warstwy transportowej.
Gniazdko jest końcowym punktem
przyłączeniowym umoŜliwiającym dwukierunkową komunikację. Większość aplikacji sieciowych jest zgodna z modelem klient-serwer.
3 Połą łą łą łączenie client-server
• Serwer akceptuje połączenie, tworzy nowe gniazdko i wiąŜe go z innym portem aby mógł kontynuować nasłuch na gniazdku oryginalnym i jednocześnie prowadzić interakcje z klientem
Echo klient
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
echoSocket = new Socket(„serwerAddress", 7);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
} catch (UnknownHostException e) {System.exit(1); } catch (IOException e) { System.exit(1); }
Echo klient c.d.
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) { out.println(userInput);
System.out.println("echo: " + in.readLine());
}
out.close(); in.close(); stdIn.close();
echoSocket.close(); }
Aplikacja serwerowa
• Aplikacja serwerowa otwiera gniazdko i wiąŜe go z określonym portem TCP a następnie oczekuje na zgłoszenia klientów. Aplikacja klienta znając adres i port serwera nawiązuje połączenie.
Inne sieciowe API
• JavaTMRemote Method Invocation (Java RMI) ~ RPC
• JavaTMIDL technology ("Java IDL") (CORBA)
• Java Remote Method Invocation over Internet Inter- ORB Protocol technology ("RMI-IIOP")