Laboratorium Java – Gniazda sieciowe [2h] Klasa Socket: java.lang

Transkrypt

Laboratorium Java – Gniazda sieciowe [2h] Klasa Socket: java.lang
Laboratorium Java – Gniazda sieciowe [2h]
Klasa Socket:
java.lang.Object
\--java.net.Socket
.close()
- zamyka połączenie
.getInputStream() - zwraca strumień wejściowy dla danego gniazda
.getOutputStream() - zwraca strumień wyjściowy dla danego gniazda
public class NetworkClient {
public static void main(String[] args) throws IOException {
//pobranie adresu sieciowego
InetAddress addr = InetAddress.getByName("localhost");
//otwarcie polaczenia
Socket socket = new Socket(addr, NetworkServer.PORT);
try {
//utworzenie strumieni
ObjectOutputStream out = new ObjectOutputStream(
socket.getOutputStream());
ObjectInputStream in = new ObjectInputStream(
socket.getInputStream());
//transmisja
out.writeObject(new String("Hello!"));
out.flush();
} finally {
//zamkniecie polaczenia
socket.close();
}
}
}
Klasa ServerSocket:
java.lang.Object
\--java.net.ServerSocket
.accept()
.close()
- oczekuje na połączenie i zwraca gniazdo do jego obsługi
- zamyka połączenie
public class NetworkServer {
static final int PORT = 1234;
public static void main(String[] args) throws IOException {
//utworzenie serwera
ServerSocket s = new ServerSocket(PORT);
try {
while (true) {
//oczekiwanie na nadejscie polaczenia
Socket socket = s.accept();
try {
//utworzenie watka serwera
new ServerThread(socket);
} catch (IOException e) {
//zamkniecie polaczenia w przypadku wystapienia bledu
socket.close();
}
}
} finally {
s.close();
}
}
}
Laboratorium Java 13 (Opracowanie: Konrad Kurczyna)
1/2
Wątek serwera:
– tworzenie strumieni w odwrotnej kolejności w stosunku do programu klienta
– zamknięcie połączenia po zerwaniu transmisji (IOException) lub innej sytuacji wyjątkowej
public class ServerThread extends Thread {
private Socket socket;
private ObjectInputStream in;
private ObjectOutputStream out;
}
public ServerThread(Socket s) throws IOException {
socket = s;
//utworzenie strumieni
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
//wystartowanie watka
start();
}
public void run() {
try {
//glowna petla watka
while (true) {
System.out.println(in.readObject());
}
} catch (Exception e) {
} finally {
try {
//zamkniecie polaczenia
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
SSL (Secure Sockets Layer)
Klasa SSLSocket:
java.lang.Object
\--java.net.Socket
\--javax.net.ssl.SSLSocket
Klasa SSLServerSocket:
java.lang.Object
\--java.net.ServerSocket
\--javax.net.ssl.SSLServerSocket
Zadanie:
– utworzyć aplikację klienta oraz wielowątkowego serwera
– obsłużyć komunikację klient/serwer lub klient/serwer/klient
Laboratorium Java 13 (Opracowanie: Konrad Kurczyna)
2/2