Back Up Next

Omrežni odjemalci - Socket

 
razred Socket služi za pisanje omrežnih odjemalcev, ki se lahko priključijo na nek strežnik in se z njim pogovarjajo;
Java podpira tudi t.i. UDP oz. datagramske povezave z DatagramSocket, ki pa jih ne bomo posebej omenjali;

Primer odjemalca, ki se priključi na strežnik, strežniku pošilja, kar tipka odjemalec in odjemalcu izpisuje, kar strežnik vrača. Programu damo dva arguenta; ime računalnika, ter vrata na katera naj se poveže.

import java.io.*;
import java.net.*;

public class test {
     public static void main(String[ ] args) throws IOException {

        Socket echoSocket = null;   
        PrintWriter out = null;
        BufferedReader in = null;
        String line;

        if (args.length!=2) { 
            System.err.println("Usage: test machine_name port_number!");
            System.exit(1); 
        }        
        try {
            echoSocket = new Socket(args[0], Integer.parseInt(args[1])); // vzpostavimo povezavo na računalnik in vrata
            out = new PrintWriter(echoSocket.getOutputStream(), true);  // tok za pisanje
            in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); // tok za branje
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: stoned.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: stoned.");
            System.exit(1);
        }

        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); // beremo iz std. vhoda
        String fromUser, fromServer;

        while ((fromServer = in.readLine()) != null) {   // beremo kar strežnik pošilja
            System.out.println("Server: " + fromServer);
            if (fromServer.equals("Bye."))
                break;
                    
            fromUser = stdIn.readLine();
            if (fromUser != null) {
                out.println(fromUser);  // pošljemo strežniku 
            }
        }

        out.close();
        in.close();
        stdIn.close();
        echoSocket.close(); // poleg tokov zapremo še Socket posebej
    }
}

Back Up Next