Jacek Rumiński - Język JAVA - Rozdział 8
- nasłuch,
- akceptacja połączeń na danych portach.
Pierwsze cztery funkcje są właściwe dla klienta, serwer rozszerza je o dodatkowe trzy. W Javie obsługę klienta, a więc realizację pierwszych czterech funkcji dostarcza klasa Socket, dla serwera przeznaczono klasę ServerSocket. Socket (gniazdo) to dobrze znane pojęcie wynikające z planów stworzenia dostępu do sieci jako do strumienia danych (strumień wejścia, strumień wyjścia). Koncepcja strumieni miała być uniwersalna dla każdego możliwego przepływu danych (z urządzenia, z pliku, z sieci). Socket jest więc pewną abstrakcją umożliwiającą przejście na wyższy poziom i nie zajmowaniem się takimi zagadnieniami jak rozmiar pakietu, retransmisja pakietu, typ mediów, itp. Rozważmy teraz zagadnienia związane ze stroną klienta procesu komunikacji sieciowej, a więc zapoznajmy się z klasą Socket pakietu java.net.
Klasa Socket posiada szereg różnych konstruktorów, z których najbardziej popularne
są:
Socket(lnetAddress address, int port) - gdzie address to obiekt klasy InetAddress będący adresem IP lub nazwą hosta, port - numer portu (0-65535),
Socket(String host, int port) - gdzie host to tekst oznaczający nazwę hosta, port -numer portu (0-65535).
Ponieważ połączenie wykonywane przez obiekt klasy Socket może nie powieść się z różnych przyczyn (np. nie znany host) konieczna jest obsługa wyjątków.
Klasyczny fragment kodu obsługi klasy Socket pokazano poniżej:
try {
Socket gniazdo= new Socket("www.amg.gda.pl", 80);
catch (UnknownHostException e) {
W powyższym przykładzie podjęta jest próba (try) połączenia z serwerem www.amg.gda.pl na porcie 80. Jeżeli nazwa hosta jest nieznana lub serwer nazw nie działa zostanie zwrócony wyjątek UnknownHostException (wyjątek nieznanego hosta). Jeśli z innych przyczyn nie uda się uzyskać połączenia zostanie zwrócony wyjątek IOException (wyjątek wejścia-wyjścia). Najprostszym przykładem programu implementującego klasę Socket może być prosty skaner portów serwera:
Przykład 8.6:
//SkanerPortow.java:
importjava.net.*; import java.io.*;
public class SkanerPortow {
8-15