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