java:sockets

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
java:sockets [2015/03/24 11:26]
gthanos
java:sockets [2015/03/24 11:46]
gthanos
Line 88: Line 88:
  
 Για να εκτελέσετε τα δύο προγράμματα θα πρέπει να εκκινήσετε πρώτα το //​EchoServer//​ δηλώνοντας το port στο οποίο θα ακούει (π.χ. ''​java EchoServer 8888''​). Στην συνέχεια εκκινείτε το //​EchoClient//​ ως εξής ''​java EchoClient localhost 8888''​. Η σύνδεση μέσω sockets δεν υλοποιεί κάποιο πρωτόκολλο επικοινωνίας σε επίπεδο application μεταξύ των δύο άκρων (π.χ. http, ftp).  Για να εκτελέσετε τα δύο προγράμματα θα πρέπει να εκκινήσετε πρώτα το //​EchoServer//​ δηλώνοντας το port στο οποίο θα ακούει (π.χ. ''​java EchoServer 8888''​). Στην συνέχεια εκκινείτε το //​EchoClient//​ ως εξής ''​java EchoClient localhost 8888''​. Η σύνδεση μέσω sockets δεν υλοποιεί κάποιο πρωτόκολλο επικοινωνίας σε επίπεδο application μεταξύ των δύο άκρων (π.χ. http, ftp). 
 +
 +Δύο παραλλαγές των παρακάτω προγραμμάτων είναι η παρακάτω. Στο πρόγραμμα //​EchoClient.java//​ πρώτα δημιουργείται το socket και μετά γίνεται connect σε συγκεκριμένη διεύθυνση (hostname, portnumber). Αντίστοιχα στο πρόγραμμα //​EchoServer//​ πρώτα δημιουργείται το socket και στη συνέχεια γίνεται bind το server socket σε συγκεκριμένη διεύθυνση ("​localhost",​ portnumber).
 +
 +<code java EchoServer.java>​
 +import java.net.*;
 +import java.io.*;
 +
 +public class EchoServer {
 +  public static void main(String[] args) throws IOException {
 +    ​
 +    if (args.length != 1) {
 +      System.err.println("​Usage:​ java EchoServer <port number>"​);​
 +      System.exit(1);​
 +    }
 +    ​
 +    int portNumber = Integer.parseInt(args[0]);​
 +    ​
 +    try (
 +      ServerSocket serverSocket = new ServerSocket();​
 +    ) {
 +      serverSocket.bind(new InetSocketAddress("​localhost",​ Integer.parseInt(args[0]) ) );
 +      try (
 +        Socket clientSocket = serverSocket.accept(); ​       ​
 +        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),​ true); ​          
 +        BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream()));​
 +      ) {
 +      // no catch here
 +        System.out.println("​Connected to "​+clientSocket.getInetAddress().toString()+":"​+clientSocket.getPort());​
 +        String inputLine;
 +        while ((inputLine = in.readLine()) != null) {
 +          out.println(inputLine);​
 +          System.out.println("​echoing:​ "​+inputLine);​
 +        }
 +      } catch (IOException e) {
 +        System.out.println("​Exception caught when trying to listen on port "
 +          + portNumber + " or listening for a connection"​);​
 +        System.out.println(e.getMessage());​
 +      }
 +    }
 +  }
 +}
 +</​code>​
 +
 +<code java EchoClient.java>​
 +import java.io.*;
 +import java.net.*;
 +
 +public class EchoClient {
 +  public static void main(String[] args) throws IOException {
 +    ​
 +    if (args.length != 2) {
 +      System.err.println(
 +        "​Usage:​ java EchoClient <host name> <port number>"​);​
 +      System.exit(1);​
 +    }
 +
 +    String hostName = args[0];
 +    int portNumber = Integer.parseInt(args[1]);​
 +    InetSocketAddress socketAddress = new InetSocketAddress(hostName,​ portNumber);​
 +
 +    try (
 +      Socket echoSocket = new Socket(); ​     ​
 +      BufferedReader stdIn =
 +        new BufferedReader(
 +          new InputStreamReader(System.in));​
 +    ) {
 +      echoSocket.connect(socketAddress);​
 +      System.out.println("​Connected to "​+echoSocket.getInetAddress().toString()+":"​+echoSocket.getPort());​
 +      try (
 +        PrintWriter out = new PrintWriter(echoSocket.getOutputStream(),​ true);
 +        BufferedReader in = new BufferedReader( new InputStreamReader(echoSocket.getInputStream() ));
 +      ) {
 +        String userInput;
 +        while ((userInput = stdIn.readLine()) != null) {
 +          out.println(userInput);​
 +          System.out.println("​echoed:​ "​+in.readLine());​
 +        }
 +      }
 +      // no catch
 +    } catch (UnknownHostException e) {
 +      System.err.println("​Don'​t know about host " + hostName);
 +      System.exit(1);​
 +    } catch (IOException e) {
 +      System.err.println("​Couldn'​t get I/O for the connection to " +
 +        hostName);
 +      System.exit(1);​
 +    }
 +    finally {
 +    ​
 +    }
 +  }
 +}
 +</​code>​
  
  
java/sockets.txt · Last modified: 2016/02/26 11:15 (external edit)