gniazda id 192623 Nieznany

background image

Komunikacja sieciowa

Klasy sieciowe znajdują się w pakiecie java.net (import java.net.*;). Pakiet java.net zawiera następujące klasy do
obsługi komunikacji sieciowej:

java.lang.Object

java.net.InetAddress opisuje adres komputera w sieci poprze z:

nazwę/domenę, np. www.fu w.edu.pl oraz

numer IP, np. 193.0.81.28.

java.net.SocketAddress

java.net.Socket

java.net.ServerSocket

java.net.Datagra mSoc ket


Wyróżniamy gniazda strumieniowe, ko munikujące się za po mocą protokołu TCP oraz gniazda datagramowe,
działające w oparciu o protokół UDP.

Do gniazd TCP zaliczamy klasy:


Socket -Wykorzystuje ją klient i serwe r (wysyłają i odbie rają prze z nią dane).Daje kontakt z Internetem
naszemu apletowi i serwerowi (tak jak gniazdo sieci elektrycznej u możliwia podłączenie do niej różnych
urząd zeń).
Klasa ta posiada szereg różnych konstruktorów, z których najbardziej popularne są dwa:

Socket(String host, int por t)

// gdzie host to tekst oznaczający nazwę hosta
// port - numer portu (0-65535)

Socket(InetAddress address, int port)

//gdzie address to obiekt klasy InetAddress będący
//adresem IP lub nazwą hosta


Posiada ona również metody, które pozwalają uzyskać informacje związane z obiektami tej klasy, takie jak:
getLocal Address() - zwraca lo kalny adres, do którego dowią zane jest gniazdo,
getLocalPort() - zwraca loka lny port, do którego dowią zane jest gniazdo,
getInetAddress() - zwraca zdalny adres, do którego gniazdo jest podłączone,
getPort() - zwraca zda lny numer portu, do którego gniazdo jest podłączone.

Przykład 1. Przykładowy wygląd klasy Klient wykorzystująca klasę Socket może wyglądać następująco

:

class

Klient

{
// strumień we jściowy

public

DataInputStream we;

// strumień wyjścio wy

public

PrintStrea m wy;

// gniazdo do Internetu

private

Soc ket gnia zdo;

// konstruktor: host (adres serwera), port (nr portu, na którym nas łuchuje serwer)

public

Klient(String host, int port)

{

try

{

gnia zdo = new Socket(host,port);
wy = new PrintStrea m(gnia zdo.getOutputStream());
we = ne w DataInputStream(gniazdo.getInputStream());
} //

try

catch

(IOException e) {}

} // konstruktor Klient(String host, int port)
} // klasa Klient

background image

Frag ment kodu tej klasy mo że wyg lądać następująco:


public

class

Klient {

public

static

void

ma in(St ring[] args) {

Socket gnia zdo;

try

{ gnia zdo =

ne w

Soc ket

(

"www.fuw.edu.pl"

, 80); }


catch

(Unknown HostException e)

{ System.err.println(e); }

catch

(IOException e)

{ System.err.println(e); }
}
}
W powyższy m przykład zie podjęta jest próba połączenia z serwerem www.fuw.edu.pl na porcie 80. Jeśli nazwa
hosta jest nieznana lub serwer nazw nie d ziała, to zostanie zwrócony wyjątek n ieznanego hosta -
UnknownHostException. Jeśli z innych przyczyn nie uda się u zyskać połączen ia, zostanie zwrócony wyjątek
IOException

Można użyć też jej np. tak:


Klient klient = new Klient(...);
String msg = "Pozdro wien ia od klienta";
klient.wy.println(msg); // wys łanie danych do serwera
msg = klient.we.readLine(); // przec zytanie odpowiedzi

Przykład 2. Inna imple mentacja klasy Klient

import

java.net.Socket;

import

java.net.UnknownHostException;

import

java.io.IOException;

import

java.io.BufferedReader;

import

java.io.InputStreamReader;

import

java.io.PrintWriter;


otwiera gnia zdo

static

final String HOST = "violet 01.mimu w.edu.pl";


Socket sd =

null;

try

{

sd = new Socket(HOST, Server.PORT);
}

catch

(UnknownHostException e ) {}

otwiera stru mień wejściowy i wy jściowy na gnieździe
Buffe redReader in = null;
PrintWriter out = null;

try

{

in = new Buffe redReader(ne w InputStrea mReader(sd.getInputStream()));
out = new PrintWriter(sd.getOutputStream(),true);
}

catch

(IOException e) {}

zamy ka strumienie związane z gniazdem
out.close();
in.close();
za my ka gnia zdo
sd.close();

ServerSocket- słu ży do tworzenia gnia zd serwerowych .
Jej metoda acce pt powoduje, że wąte k serwe ra zawiesza się c ze ka jąc na zgłoszenie klienta:

background image


// port na którym nasłuchuje serwer

fina l static

int SERVER_PORT = 9001;

ServerSocket serwer;
Socket gnia zdo;
String msg;

try

{

server = ne w Se rverSoc ket(SERVER_ PORT);
// serwer c ze ka na klienta
gnia zdo = server.accept();
// mając gniazdo wy mienia dane z kliente m
// analogic znie jak on . . .
}

catch

(IOException e) {}

Przykład 3. Implementacja Serwera

import

java.net.Socket;

import

java.net.ServerSoc ket;

import

java.io.IOException;

import

java.io.BufferedReader;

import

java.io.InputStreamReader;

import

java.io.PrintWriter;


otwiera gniazdo nasłuchujące na porcie, port 0 oznacza p ierwszy wo lny

import

java.net.ServerSoc ket;

import

java.io.IOException;

public static fina l

int PORT = 1024;


ServerSocket sd = null;

try

{

sd = new ServerSocket(PORT);
}

catch

(IOException e ) {}


Maksymalna d ługość kolejki oczekujących na połączenie wynosi 50.
akceptuje nadchodzące połączenie od klienta

import

java.net.Socket;


Socket client = nu ll;

try

{

c lient = sd.accept();
}

catch

(IOException e ) {}


Wątek serwera zostaje zab lokowany aż zaakceptuje połączenie.
otwiera stru mień wejściowy i wy jściowy na gnieździe klienckim
za my ka strumienie zwią zane z gnia zde m
za my ka gnia zdo

Dla przykładu podaje program łączący się z serwerem czasu, a następnie wyświetlający czas na ekranie:

import

java.net.*;

import

java.io.*;

public

class

Zegar {

public

static

void

main(String[] a rgs) {

Socket gnia zdo;
String host = "info.cyf-kr.edu.pl";
Buffe redReader strumienCzasu;

background image

if

(args.length > 0) {

host = args[0];
}

try

{

gniazdo

=

ne w

Soc ket (host, 13);

strumien Czasu =

new

Buffe redReader(

new

InputStreamReader(gniazdo.getInputStream()));
String c zas = strumien Czasu.readLine();
System.out.println("Na "+host+" jest: "+czas);
}

catch

(UnknownHostException e ) {System.err.println(e);}

catch

(IOException e) {System.err.println(e );}

}
}

Ponadto oddzielna klasa powinna imp lementować protokół ko munikacyjny.

class Protocol {

St ring processInput(String in) {
// zwraca odpowiedź na podstawie otrzy manego pytania i/lub swojego stanu.
}
}

Podsumowanie
Aby aplet mógł się ko munikować n ie tylko z ko mputerem, z którego został pobrany, możn a stworzyć
ko munikację pośrednią przez serwer. Inne zastosowania serwera d ziałającego na ko mputerze źródłowy m strony:
* wyciąganie i wprowad zanie danych do bazy,
* pobieranie danych od jednego klienta i wysyłanie do pozostałych,
* ogólnie wykonywanie dowolnej usługi żądanej przez klienta.

Dodatkowo:
Inna klasa wy korzystywaną w Javie do adresowania ko mputerów jest klasa URL ora z je j pochodne:

URLClassLoader,

URLConnection,

URLDecoder,

URLEncoder,

URLStrea mHandler.

URL c zyli Uniform Resource Locator jes t specjalną formą adresu zasobów w siec i. URL posiada dwa
podstawowe elementy: identyfikator protokołu o raz nazwę zasobów. Identyfikator p rotokołu to np. http, ftp,
gopher, rmi czy jdbc. Nazwę zasobów stanowią takie elementy jak: nazwa hosta, nazwa pliku, numer portu,
nazwa odwo łania (w danym p liku).
Tworząc obiekt klasy URL otrzy mujemy gotowy wskaźn ik, który jest wykorzystywany przez liczne metody
Javy (np. otwieran ie obrazka getImage(), tworzenie połączen ia w JDBC - Connection).
Konstruktor y klasy URL
W odróżnieniu od klasy InetAddress tworzenie obie któw klasy URL odbywa się poprze z wy korzystanie jednego
z jej licznych konstruktorów.
Każdy z n ich związany jest z koniecznością obsługi wyjątku MalformedURLException powstającym w
przypadku problemów
z identyfikac ją wska zanego w wy wołaniu konstruktora protokołu.
Przykładowe konstruktory:
URL(String adres),
URL(String protokół, String host, int port, String plik)
Klasa URL zawiera szereg metod u możliwiających filtrację adresu,
a więc pobranie nazwy protokołu - getProtocol(), nazwy ko mputera - getHost(), p liku - getFile() czy nu meru
portu - getPort().
Dodatkowo klasa URL zawiera metody u możliwiające wy konywanie połączenia z hostem – tworzenie gniazda i
przesłanie danych.

background image

Program u mo żliwia pobranie kodu źródło wego wskazanej strony WWW
i wyświetlen ie go na ekran ie.

import

java

.net.*;

import

java

.io.*;

public

class

Pobierz {

public

static

void

main(String args[]) {

URL url;

String tekst;

try

{

url =

new

URL(

"http://www.fuw.edu.pl/"

);

InputStreamReader in =

new

InputStrea mReader(url.openStrea m());

Buffe redReader br =

new

Buffered Reader(in);

while

( (tekst=br.read Line()) !=

null

) {

System.out.println(tekst);

}

}

catch

(Exception e) {e.p rintStackTrace(); }

}

}


Wyszukiwarka

Podobne podstrony:
gniazda USB id 192626 Nieznany
Abolicja podatkowa id 50334 Nieznany (2)
4 LIDER MENEDZER id 37733 Nieznany (2)
katechezy MB id 233498 Nieznany
metro sciaga id 296943 Nieznany
perf id 354744 Nieznany
interbase id 92028 Nieznany
Mbaku id 289860 Nieznany
Probiotyki antybiotyki id 66316 Nieznany
miedziowanie cz 2 id 113259 Nieznany
LTC1729 id 273494 Nieznany
D11B7AOver0400 id 130434 Nieznany
analiza ryzyka bio id 61320 Nieznany
pedagogika ogolna id 353595 Nieznany
Misc3 id 302777 Nieznany
cw med 5 id 122239 Nieznany
D20031152Lj id 130579 Nieznany

więcej podobnych podstron