5.1. Tīklošanās

Ievads

Mērķi

  • Prast rakstīt programmas, kuras izveido tīkla savienojumu
  • Saprast TCP/IP protokolu
  • Lietot ServerSocket un Socket klases TCP/IP serveru un klientu implementēšanai

Motivācija

  • Kā var izveidot savienojumu starp klienta mašīnu un serveri tīklā?

Soketi

  • Soketiem ir divas plūsmas
  • Konekciju izveido līdzīgi kā telefonu tīklāKlientu un serveru porti

Tīklošanās ar Javas tehnoloģiju

Savienojuma izveidošanai vajadzīga servera mašīnas adrese:

  • Servera mašīnas IP adrese vai vārds (unikāli identificē mašīnu intranetā vai Internetā)
  • Porta numurs (identificē konekcijas izveidošanas mērķi)
  • Portu numuri ir veseli skaitļi no 0 līdz 65535

Javas tīklošanās modelis

Apmaiņa ar plūsmām starp klientu un serveri

Minimāls TCP/IP serveris

1  import java.net.*;
2  import java.io.*;
3  
4  public class SimpleServer {
5    public static void main(String args[]) {
6      ServerSocket s = null;
7  
8      // Reģistrē šo serveri uz 5432 porta
9      try {
10        s = new ServerSocket(5432);
11      } catch (IOException e) {
12        // ignorē
13      }
14  
15     // Mūžīgais klausīšanās cikls
16      while (true) {
17        try {
18          // Klausās un gaida savienojumu
19          Socket s1 = s.accept();
20  
21          // Soketa izvades plūsma
22          OutputStream s1out = s1.getOutputStream();
23          DataOutputStream dos = new DataOutputStream(s1out);
24  
25          // Aizsūta tekstu
26          dos.writeUTF("Sveiciens no TCP/IP servera!");
27  
28          // Aizver konekciju, bet ne pašu servera soketu
29          dos.close();
30          s1.close();
31        } catch (IOException e) {
32          // ignorē
33        }
34      }
35    }
36  }

Minimāls TCP/IP klients

1  import java.net.*;
2  import java.io.*;
3  
4  public class SimpleClient {
5    public static void main(String args[]) {
6      try {
7        // Atveram konekciju ar TCP/IP serveri uz 5432 porta
8        // localhost jeb 127.0.0.1 (ja soketserveris arī uz šīs mašīnas)
9        Socket s1 = new Socket("127.0.0.1", 5432);
10  
11        // Dabū soketa ievades plūsmu
12        InputStream is = s1.getInputStream();
13        // Pārveido par "data" ievades plūsmu
14        DataInputStream dis = new DataInputStream(is);
15  
16        // Lasa un drukā ievadi
17        System.out.println(dis.readUTF());
18  
19        // Aizver plūsmu un konekciju
20        dis.close();
21        s1.close();
22      } catch (ConnectException connExc) {
23        System.err.println("Nevarēja pieslēgties serverim");
24      } catch (IOException e) {
25        // ignorē
26      }
27    }
28  }

Jautājumi paškontrolei

  • Prast programmēt tīkla savienojuma izveidošanu
  • Saprast TCP/IP protokolu
  • Lietot ServerSocket un Socket klases, lai implementētu TCP/IP klientus un serverus

Diskusiju tēmas

  • Kā var izveidot dalītu objektu sistēmu, izmantojot objektu serializāciju un tīkla protokolus? Vai esat dzirdējuši par RMI (Remote Method Invocation)?
  • Citi jautājumi par tīklu aplikāciju programmēšanu ir risināti nodaļās par RMI, CORBA, Javas servletiem, Web servisiem, u.c.