Preview
Comunicare prin socket-uri
Socket-urile sunt folosite pentru transmiterea de date folosind protocolul TCP/IP. Ele sunt obiecte ce trebuie create la ambele capete ale conexiunii. Socket-urile client sunt obiecte de tipul clasei Socket, iar socket-urile server sunt obiecte de tipul clasei ServerSocket; ambele clase fac parte din pachetul java.net. Socket-urilor li se pot ataşa un flux de intrare şi unul de ieşire, prin care pot recepţiona/ transmite, date.
Prezentăm în continuare schema generală a lucrului cu socket-uri, apelând la facilităţile de intrare/ieşire la nivel de octet.
Un mod tipic de creare a unui socket client este următorul:
try {
Socket cs = null; cs = new Socket(\"adresa\",nrport);
DataInputStream is =
new DataInputStream(cs.getInputStream());
DataOutputStream os =
new DataOutputStream(cs.getOutputStream());
}
catch(UnknownHostException e) { ... }
catch(IOException e) { ... }
unde adresa este adresa IP a serverului, iar nrport este numărul portului ales pentru comunicare. Socket-ului îi sunt ataşate fluxul os ce va fi folosit pentru a transmite date serverului, precum şi fluxul is ce va fi folosit pentru recepţionarea datelor transmise de server.
Un mod tipic de creare a unui socket server este următorul:
ServerSocket ss = null; Socket cs = null;
try {
ss = new ServerSocket(nrport);
// System.out.println(\"Serverul a pornit\");
}
catch(IOException e) { ... }
try {
cs = ss.accept();
DataInputStream is =
new DataInputStream(cs.getInputStream());
DataOutputStream os =
new DataOutputStream(cs.getOutputStream());
}
catch(UnknownHostException e) { ... }
catch IOException e) { ... }
Observăm că pentru server nu este necesară precizarea unei adrese IP, ci numai a unui port, care trebuie să coincidă cu cel folosit de client.
Metoda accept: se aşteptă ca un client să încerce să se lege la server; în momentul în care acest lucru se întâmplă şi legătura s-a stabilit, metoda creează şi întoarce un socket cs de tip client. Acestuia îi ataşăm un flux de intrare şi unul de ieşire.
În final toate socket-urile şi fluxurile trebuie închise explicit prin invocarea metodei close.
|