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
java:sockets [2015/03/24 09:53]
gthanos
java:sockets [2016/02/26 11:15] (current)
Line 73: Line 73:
       while ((userInput = stdIn.readLine()) != null) {       while ((userInput = stdIn.readLine()) != null) {
         out.println(userInput);​         out.println(userInput);​
-        ​while(in.ready()) { +        System.out.println("​echoed : "+in.readLine());​
-          ​System.out.println(in.readLine());​ +
-        }+
       }       }
     } catch (UnknownHostException e) {     } catch (UnknownHostException e) {
Line 90: 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);​
 +    }
 +  }
 +}
 +</​code>​
  
  
java/sockets.1427190788.txt.gz · Last modified: 2016/02/26 11:15 (external edit)