gniazda komunikacji sieciowej w języku java
DESCRIPTION
Gniazda komunikacji sieciowej w języku Java. Kamila Jabłońska Aleksandra Kosecka. Gniazda w Javie. GNIAZDO jest punktem końcowym dwukierunkowej komunikacji pomiędzy odległymi procesami. Gniazda (strumieniowe lub datagramowe). klienckie ( ang. client socket ). serwerowe - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/1.jpg)
1
Gniazda komunikacji sieciowej w języku Java
Kamila Jabłońska Aleksandra Kosecka
![Page 2: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/2.jpg)
2
Gniazda w Javie
GNIAZDO jest punktem końcowym dwukierunkowej komunikacji pomiędzy odległymi procesami.
Gniazda(strumieniowe lub datagramowe)
klienckie
(ang. client socket)
serwerowe
(ang. server socket)
![Page 3: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/3.jpg)
3
Pakiet java.net
Klasy do obsługi komunikacji sieciowej:
![Page 4: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/4.jpg)
4
klasa Socket dla gniazda komunikacji strumieniowej peer-to-peer
klasa ServerSocket dla gniazda nasłuchu po stronie serwera
klasa java.net.DatagramSocket dla gniazda komunikacji pakietowej
Pakiet java.net definiuje kilka klas do obsługi gniazd:
![Page 5: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/5.jpg)
5
Adres gniazda
Adres gniazda składa się z: adresu komputera (hosta) numeru portu komunikacji sieciowej
Adres komputera może być w postaci: nazwy tekstowej zgodnej z wymogami odpowiedniego
serwisu nazewniczego adresu IP w postaci tekstowej lub numerycznej
![Page 6: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/6.jpg)
6
Klasy do reprezentacji adresów
![Page 7: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/7.jpg)
7
Metody klasy InetAddress
static InetAddress getByAddress(byte[] addr) — tworzy obiekt na podstawie adresu IP w postaci binarnej,
static InetAddress getByAddress(String host,byte[]addr) —
tworzy obiekt na podstawie nazwy hosta i binarnego adresu IP (bez odwoływania się do serwisu nazw)
static InetAddress getByName(String host) —tworzy obiekt na podstawie nazwy hosta,
static InetAddress getLocalHost() —
tworzy obiekt reprezentujący adres lokalny hosta.
![Page 8: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/8.jpg)
8
Klasy SocketAdress i
InetSocketAdress
Klasa SocketAdress jest klasą abstrakcyjną, reprezentującą ogólny adres gniazda (nie związany z żadnym protokołem).
![Page 9: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/9.jpg)
9
Klasy SocketAdress i InetSocketAdress
Adres do obiektu klasy InetSocketAddress przypisywany jest tylko w jednym z konstruktorów:
InetSocketAddress(InetAddress addr, int port)
InetSocketAddress(int port)
InetSocketAddress(String hostname, int port)
![Page 10: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/10.jpg)
10
Klasy do reprezentacji gniazd
![Page 11: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/11.jpg)
11
Konstruktory klasy Socket Socket() — utworzenie gniazda Socket(InetAddress address, int port) — utworzenie gniazda oraz próba nawiązania połączenia z serwerem Socket(InetAddress address, int port,InetAddress
localAddr, int localPort) —utworzenie gniazda z dowiązaniem lokalnym oraz próba nawiązania połączenia z serwerem
Socket(String host, int port) — utworzenie gniazda oraz próba nawiązania połączenia z serwerem na maszynie o podanej nazwie
Socket(String host, int port, InetAddress localAddr, int localPort) — utworzenie gniazda z dowiązaniem lokalnym oraz próba nawiązania połączenia z serwerem na maszynie o podanej nazwie
![Page 12: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/12.jpg)
12
Tworzenie gniazda klientaimport java.net.*;import java.io.*;
public class Gniazdo{
public static void main(String args[]){
try{Socket socket = new Socket(„kamola.pl",
80);//konstruktor}catch(UnknownHostException e){
System.out.println("Nieznany host.");}catch(IOException e){
System.out.println(e);}
}}
![Page 13: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/13.jpg)
13
Metody klasy Socket void bind(SocketAddress bindpoint) —
przyporządkowanie do lokalnego adresu (nadanie nazwy) void close() — zamknięcie gniazda void connect(SocketAddress endpoint) — próba
nawiązania połączenia z serwerem void connect(SocketAddress endpoint, int
timeout) —
próba nawiązania połączenia z serwerem w określonym czasie
![Page 14: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/14.jpg)
14
Nawiązanie połączenia
Socket socket;
InetSocketAddress address;
try {
socket = new Socket();
address = new InetSocketAddress("localhost", 6000);
socket.connect(address);
System.out.println("Polaczenie nawiazane");
}
catch (Exception e) {
System.err.println( e.getMessage() );
e.printStackTrace();
}
![Page 15: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/15.jpg)
15
Klasa ServerSocketServerSocket() — utworzenie gniazda bez nadanej nazwy (bez
dowiązania)ServerSocket(int port) — utworzenie gniazda zprzypisanym domyślnym adresem IP oraz podanym numeremportuServerSocket(int port, int backlog) — utworzeniegniazda na podanym numerze portu z określeniemmaksymalnej długości kolejki oczekujących żądańServerSocket(int port, int backlog,InetAddress bindAddr)— utworzenie gniazda podobniejak wyżej z dodatkowym podaniem adresu IP, jaki ma byćprzypisany do gniazda
![Page 16: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/16.jpg)
16
Metody klasy ServerSocket
Socket accept() — oczekiwanie na zgłoszenie klientów lub
przyjęcie wcześniej zarejestrowanego zgłoszenia
void bind(SocketAddress endpoint) —
jawne przypisanie adresu (nadanie nazwy)
void bind(SocketAddress endpoint, int backlog)
jawne przypisanie nazwy i określenie maksymalnej długości
kolejki oczekujących żądań
void close() — zamknięcie z gniazda
![Page 17: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/17.jpg)
17
Przykładowy program serwera
import java.net.*;
import java.io.*;
public class Server
{
public static void main(String args[]) throws IOException {
ServerSocket server_socket = null;
InetSocketAddress address;
Socket socket;
![Page 18: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/18.jpg)
18
Przykładowy program serweratry {
server_socket = new ServerSocket();address = new InetSocketAddress(6000);server_socket.bind(address);System.out.println("Serwer nasluchuje...");socket = server_socket.accept();System.out.println("Zglosil sie klient");System.err.println("Podlaczyl sie z adresu: " + socket.getInetAddress() );
}catch (Exception e) {
System.err.println( e.getMessage() );e.printStackTrace();
}server_socket.close(); }}
![Page 19: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/19.jpg)
19
Przykładowy program klientaimport java.net.*;import java.io.*;public class Client{
public static void main(String args[]){
Socket socket = null;try{
socket = new Socket("127.0.0.1", 6000); System.err.println("Nawiazano polaczenie!"); System.out.println(socket);
}catch(UnknownHostException e){
System.out.println("Nieznany host");}catch(IOException e){
System.out.println(e);}
}}
![Page 20: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/20.jpg)
20
Przykład wątku serwera współbieżnegopublic class ServiceThread extends java.lang.Thread {
private Socket socket;
private int number;
public ServiceThread(Socket s, int n){
socket = s;
number = n;
}
public void run() {
...
}
}
![Page 21: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/21.jpg)
21
Współbieżna obsługa wielu połączeńServerSocket server_socket;Socket socket;int number = 0;try {
server_socket = new ServerSocket(6000);while (true) {
socket = server_socket.accept();System.out.println("Zglosil sie klient");number++;new ServiceThread( socket, number ).start();
}}catch (Exception e) {
System.err.println( e.getMessage() );e.printStackTrace();
}
![Page 22: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/22.jpg)
22
Przekazywanie danych przez gniazdo strumieniowe
W trybie połączeniowym gniazdo udostępnia strumień
wejściowy oraz strumień wyjściowy, za pośrednictwem których można odpowiednio odbierać i wysyłać dane. Referencje do strumieni zwracają następujące metody obiektu klasy Socket:
OutputStream getOutputStream() — referencja do strumienia wyjściowego, przez który wysyłane są dane,
IntputStream getIntputStream() — referencja do strumienia wejściowego, przez który odbierane są dane.
![Page 23: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/23.jpg)
23
Wysyłanie danych przez gniazdo strumieniowe
try {
DataOutputStream out;
OutputStream out_sock;
out_sock = socket.getOutputStream();
out = new DataOutputStream ( out_sock );
out.writeInt(87);
}
catch (IOException e) {
System.err.println( e.getMessage());
e.printStackTrace();
}
![Page 24: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/24.jpg)
24
Filtry
Filtry są szczególnym rodzajem strumieni.
Umożliwiają one łączenie strumieni i tworzenie złożonych potoków dzięki specyficznym konstruktorom:
FilterInputStream(InputStream in) FilterOutputStream(OutputStream out)
![Page 25: Gniazda komunikacji sieciowej w języku Java](https://reader036.vdocuments.pub/reader036/viewer/2022062422/568133f9550346895d9aedd4/html5/thumbnails/25.jpg)
25
Buforowanie strumieni Filtry BufferedInputStream i BufferedOutputStream
umożliwiają buforowanie danych (strumienia bajtów).
Wielkość bufora można ustalić w czasie tworzenia obiektu
z pomocą konstruktora:
BufferedInputStream(InputStream in, int size)Dane z bufora są przekazywane do strumienia wyjściowego
w wyniku zapełnienia bufora lub wywołania metody flush()
obiektu klasyFilterOutputStream (lub pochodnej).