Socket-uri de programare pe java

Vrei să dezvolți un program de rețea pe Java - o jucărie, un chat sau amândouă împreună ... Ai găsit articolul potrivit - aici te poți familiariza cu lumea interesantă a socketurilor din Java. După ce ați citit acest articol, veți vedea lumină la capătul tunelului - devine evident scopul obiectelor și modul în care se dezvoltă un program simplu care utilizează prize în limbaje de programare Java.







Ce este un soclu?

Dacă adăugăm împreună ecuațiile de mai sus, obținem:

_____ = identifică în mod unic programul din rețea.

Dacă ați ghicit-o singură, înseamnă că eforturile mele nu au fost irosite. Dacă nu, citiți-o din nou sau folosiți Google pentru a găsi cel mai bun articol.

_____ - aceasta este ... SOOKET!

Cum se programează folosind socket-uri?

Destul despre teorie, să trecem la acțiune. Vom dezvolta un cod Java foarte simplu și intuitiv care demonstrează utilizarea unor prize. Să încercăm să implementăm următoarea listă de acțiuni:

1) Un program Java va încerca să contacteze un alt program Java (care așteaptă cu disperare cineva să îl contacteze). Suntem numiți primul program de către Client, iar cel de-al doilea de către Server.

2) După ce ați reușit să comunicați cu serverul, clientul așteaptă introducerea de date de la dvs. și trimite textul către server.

3) Programul server trimite clientului acel text pentru a arăta că poate face chiar și o astfel de acțiune utilă.

4) A primit textul de pe server, clientul vă arată pentru a vă arăta opinia serverului despre dvs. Pregătit să începeți să lucrați? Să începem. Observ doar că nu vă voi învăța cum să programați în Java de la zero, ci doar să explicați codul care se referă la prize. Creați 2 noi programe Java și denumiți-le Server.java și Client.java. Am dat codul de mai jos, doar nu te speria, voi explica totul.


import java.net. *;
import java.io. *;
public class Server public static void principal (String [] ar) int port = 6666; // portul aleatoriu (poate fi orice număr de la 1025 la 65535)
încercați ServerSocket ss = ServerSocket nou (port); // creați un soclu server și legați-l la portul de mai sus
System.out.println ("Așteptare pentru un client.");

Soclu soclu = ss.accept (); // provoca serverul să aștepte conexiunile și să afișeze un mesaj când cineva a contactat serverul
System.out.println ("Am un client :) În final, cineva ma văzut prin toată capacul!");
System.out.println ();

// Luați fluxurile de intrare și de ieșire ale soclului, acum putem primi și trimite date către client.
InputStream sin = socket.getInputStream ();
OutputStream sud = socket.getOutputStream ();

// Conversia fluxurilor către alt tip, astfel încât să fie mai ușor să procesați mesajele text.
DataInputStream în = nou DataInputStream (sin);






DataOutputStream out = nou DataOutputStream (conc);

Linia de linie = null;
în timp ce (true) line = in.readUTF (); // așteptați până când clientul trimite o linie de text.
System.out.println ("Clientul prost mi-a trimis această linie" + Line);
System.out.println ("Îi trimit înapoi");
out.writeUTF (linie); // trimite clientului înapoi același rând de text.
out.flush (); // provocați firul să încheie transferul de date.
System.out.println ("Așteaptă următoarea linie");
System.out.println ();
>
> captură (excepție x)
>
>

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

// Luați fluxurile de intrare și de ieșire ale soclului, acum putem primi și trimite date de la client.
InputStream sin = socket.getInputStream ();
OutputStream sud = socket.getOutputStream ();

// Conversia fluxurilor către alt tip, astfel încât să fie mai ușor de procesat mesajele text.
DataInputStream în = nou DataInputStream (sin);
DataOutputStream out = nou DataOutputStream (conc);

// Creați un fir de citire de pe tastatură.
Tastatura BufferedReader = BufferedReader nou (noul InputStreamReader (System.in));
Linia de linie = null;
System.out.println ( „Scrieți ceva și apăsați enter Va trimite la server și spune-ya ceea ce crede ..“);
System.out.println ();

în timp ce (true) line = keyboard.readLine (); // așteptați până când utilizatorul introduce ceva și apasă butonul Enter.
System.out.println ("Trimiterea acestei linii către server");
out.writeUTF (linie); // Trimiteți șirul de text introdus pe server.
out.flush (); // provocați firul să încheie transferul de date.
linia = in.readUTF (); // așteptați până când serverul trimite o linie de text.
System.out.println ("Serverul a fost foarte politicos, mi-a trimis acest lucru" + Line);
System.out.println ("Se pare că serverul este mulțumit de noi. Continuați și introduceți mai multe linii");
System.out.println ();
>
> captură (excepție x) x.printStackTrace ();
>
>
>

Acum compilam codul:

javac Server.java Client.java

Deschideți două ferestre de comandă (DOS). Într-o fereastră introducem:

Necesar în această ordine.

Acum introduceți o linie de text în fereastra în care rulează clientul și apăsați butonul Enter. Uita-te la două ferestre și vezi ce se întâmplă. La sfârșit, apăsați pe Ctrl-C pentru a opri programele.

Explicarea codului de lucru al prizelor

Luați în considerare următoarea parte a codului serverului:

ServerSocket ss = ServerSocket nou (port);
Soclu soclu = ss.accept ();

Clasa ServerSocket este ușor diferită de clasa Socket. Clasa socket-ului este soclul. Principala diferență dintre ServerSocket este că poate face ca programul să aștepte conexiuni de la clienți. Când îl creați, trebuie să specificați portul cu care va funcționa și să apelați metoda accept (). Această metodă determină ca programul să aștepte conexiuni pe portul specificat. Executarea programului se blochează în acest loc până când clientul se conectează. După ce clientul se conectează cu succes, este creat un obiect obișnuit Socket, pe care îl puteți utiliza pentru a efectua toate operațiile existente cu soclul. Rețineți, de asemenea, că acest obiect Socket afișează celălalt capăt al conexiunii. Dacă doriți să trimiteți date către client, atunci nu puteți utiliza propriul soclu pentru acest lucru.

InetAddress ipAddress = InetAddress.getByName (adresa);

După ce am creat InetAddress, putem crea un soclu:

Socket socket = Socket nou (ipAddress, serverPort);

InputStream sin = socket.getInputStream ();
OutputStream sud = socket.getOutputStream ();

Următoarele linii convertesc pur și simplu fluxurile către alte tipuri de fluxuri. După aceea, va fi mai ușor să lucrăm cu obiecte String. Acest cod nu face nimic în rețea.

DataInputStream în = nou DataInputStream (sin);
DataOutputStream out = nou DataOutputStream (conc);

Toate celelalte sunt foarte simple - manipulări simple cu obiecte filetate (fără prize). Puteți utiliza firele preferate, puteți apela metodele preferate și asigurați-vă că transferați date către cel de-al doilea capăt. Dacă nu sunteți foarte informat în utilizarea firelor, vă recomandăm să găsiți un articol despre ele și să îl citiți.







Articole similare

Trimiteți-le prietenilor: