Programarea socketului în Java: un scurt ghid

Publicat: 2022-05-21

În Java, programarea socketului este un mijloc de a comunica între programe și de a rămâne conectat la diferite JRE - atât servere orientate spre conexiune, cât și servere neorientate spre conexiune. Un socket de server Java este folosit exclusiv pentru a iniția și procesa comunicarea dintre un server și un client.

Acest blog va acoperi tot ce trebuie să știți despre programarea socket-urilor.

Cuprins

Programare socket în Java

Programarea socketului este procesul de completare și utilizare a nodurilor de rețea separate într-o manieră interactivă. Este un sistem de comunicare bidirecțională în care un soclu (nod) ascultă pe un anumit port la o adresă IP în timp ce celălalt soclu se conectează.

Prize în Java

În Java, prizele sunt un capăt al unui canal de comunicare bidirecțională care conectează două programe în rețea. Stratul TCP este folosit pentru a atribui un număr de port socketului Java dat pentru a identifica aplicația către care transferăm date. Utilizăm combinația dintre o adresă IP și un număr de port pentru a crea un punct final.

Platforma Java include o clasă numită Socket, care implementează o parte a unei conexiuni de rețea bidirecțională între aplicația ta Java și un alt program. Clasa se află deasupra unei implementări independente de platformă, protejând programul Java de detalii specifice sistemului.

Folosind clasa în loc de un anumit cod nativ, programele dumneavoastră Java pot comunica prin rețea într-un mod independent de platformă.

În plus, java.net include clasa ServerSocket, care implementează un socket pe care serverele îl pot folosi pentru a asculta și accepta conexiuni de la clienți. Acesta este un exemplu care arată cum să utilizați clasele ServerSocket și Socket.

Între portul de pe partea client și portul pe partea de server, este creată o conexiune.

Stabilirea unei conexiuni socket Java [CLIENT SIDE]

Înainte de a continua cu programarea pe partea client, clientul ar trebui să aștepte inițierea serverului. Odată pus în funcțiune, va începe să trimită interogări către serverul Java. Clientul va aștepta apoi răspunsul serverului. Acesta este un rezumat bun al logicii conexiunii client-server.

Să analizăm mai detaliat programarea pe partea clientului.

Pentru a vă conecta la o altă mașină, veți avea nevoie de o conexiune priză. Cele două computere trebuie să știe unde se află în rețea (adresa IP) și ce port TCP îl folosesc pentru a stabili o conexiune socket. Cadrul java.net denotă clasa socket.

Adresa IP a serverului este primul argument de intrare. Portul TCP este următorul parametru aici. (Nu este nimic mai mult decât un număr care spune ce program trebuie pornit pe un server.) HTTP, de exemplu, utilizează portul 80. De obicei, intervalul numerelor de porturi este de la 0 la 65535.

Comunicare

Fluxurile sunt utilizate pentru intrarea și ieșirea datelor atunci când comunică printr-o conexiune socket. După ce ați trimis cererile și ați stabilit o conexiune puternică, trebuie să opriți conexiunea la socket.

Închiderea unei conexiuni Java Server Socket

Conexiunea socket este închisă în mod explicit după trimiterea mesajului către server, conexiunea socket este închisă în mod explicit.

// Program Demo Java pentru Clientele

import java.net.*;

import java.io.*;

clasă publică Client_Side_Program

{

// pentru inițializarea fluxurilor de socket, fluxurilor de intrare și fluxurilor de ieșire

private Socket socket = null;

private DataInputStream input = null;

private DataOutputStream out = null;

// constructor pentru a pune portul TCP și adresa IP

client public (adăugare șir, port int)

{

// stabilim o conexiune

încerca

{

socket = socket nou (adăugare, port);

System.out.println(„Conectat”);

// preia intrare de la terminal

input = new DataInputStream(System.in);

// trimite ieșire la socket

out = nou DataOutputStream(socket.getOutputStream());

}

catch(UnknownHostException u)

{

System.out.println(u);

}

catch(IOException i)

{

System.out.println(i);

}

// șir pentru a citi mesajul de la intrare

Linie șir = „”;

// continuă să citești până când este introdus „Peste”.

în timp ce (!line.equals(„Peste”))

{

încerca

{

line = input.readLine();

out.writeUTF(linie);

}

catch(IOException i)

{

System.out.println(i);

}

}

// închide conexiunea

încerca

{

input.close();

out.close();

socket.close();

}

catch(IOException i)

{

System.out.println(i);

}

}

public static void main(Argumente șir[])

{

Client client = client nou ("127.0.0.1", 5000);

}

}

Pentru a vizita sursa acestui cod, faceți clic aici .

Stabilirea unei conexiuni socket Java [SERVER SIDE]

Serverul își creează obiectul și așteaptă cererea clientului în timp ce ia în considerare conexiunea la socketul serverului Java. Serverul va interacționa cu clientul odată ce cererea a fost trimisă. Veți avea nevoie de două socket-uri pentru a codifica aplicația de pe partea serverului, care este după cum urmează – când un client creează un nou Socket(), un ServerSocket este creat pentru a aștepta cererile clientului. Un socket simplu poate fi definit ca un program care inițiază comunicarea pe partea serverului cu clientul. Puteți comunica răspunsurile cu clientul în consecință, odată ce obțineți raportul de la conexiunea socket-ului de pe serverul java.

Comunicare

Pentru a folosi socket-ul pentru trimiterea ieșirii, așteptăm cu nerăbdare să folosim metoda getOutputStream().

Închiderea unei conexiuni Java Server Socket

Este crucial să finalizați conexiunea prin oprirea atât a prizei, cât și a fluxurilor de intrare-ieșire.

// Un program server java

import java.net.*;

import java.io.*;

Server de clasă publică

{

//inițializați socket-ul și fluxul de intrare

private Socket socket = null;

server privat ServerSocket = null;

private DataInputStream in = null;

// constructor cu port

server public (port int)

{

// așteaptă o conexiune după pornirea unui server

încerca

{

server = nou ServerSocket(port);

System.out.println(„Server: început”);

System.out.println(„Se așteaptă sosirea unui client…”);

socket = server.accept();

System.out.println(„Clientul a fost acceptat”);

// pentru preluarea intrării socket-ului clientului

in = new DataInputStream(

nou BufferedInputStream(socket.getInputStream()));

Linie șir = „”;

// pentru citirea mesajului de la client până când este trimis „Over”.

în timp ce (!line.equals(„Peste”))

{

încerca

{

linie = in.readUTF();

System.out.println(line);

}

catch(IOException i)

{

System.out.println(i);

}

}

System.out.println(„Închiderea conexiunii”);

// strânsă legătură

socket.close();

in.close();

}

catch(IOException i)

{

System.out.println(i);

}

}

public static void main(Argumente șir[])

{

Server server = server nou (5000);

}

}

Pentru a verifica detaliile acestui cod, faceți clic aici .

Puteți rula mai întâi software-ul de pe partea de server după configurarea atât a clientului, cât și a serverului. Apoi, trebuie să executați software-ul pe partea client și să trimiteți cererea. Serverul va reacționa imediat când cererea vine de la capătul clientului.

Explorați cursurile noastre populare de inginerie software

SL. Nu Programe de dezvoltare software
1 Master în Informatică de la LJMU și IIITB Programul de certificat de securitate cibernetică Caltech CTME
2 Bootcamp de dezvoltare completă Programul PG în Blockchain
3 Program Executive Postuniversitar în Dezvoltare Software - Specializare în DevOps Vezi toate cursurile de Inginerie software

Terminalul sau promptul de comandă rulează

Pentru a iniția terminalul sau promptul de comandă, vom folosi următoarele comenzi. Pentru început, vom crea două ferestre, una va fi dedicată serverului și cealaltă pentru client.

  1. Lăsați programul Server să înceapă să ruleze.

$ server java

  1. Apoi, într-un alt terminal, lansați aplicația Client ca,

client java $

Software-ul va afișa „Conectat” și „Client Acceptat” pe măsură ce serverul acceptă clientul.

  1. În caseta Client, puteți începe apoi să introduceți mesaje. Iată un exemplu de intrare de client.

Bună! Aceasta marchează prima mea conexiune de priză profesională.

Pe care serverul îl primește și îl afișează în același timp

Bună! Aceasta marchează prima mea conexiune de priză profesională.

Peste.

Închiderea conexiunii

După cum sa menționat anterior, trimiterea „Peste” încheie conexiunea dintre Client și Server.

Citiți articolele noastre populare legate de dezvoltarea software

Cum se implementează abstracția datelor în Java? Ce este clasa interioară în Java? Identificatori Java: definiție, sintaxă și exemple
Înțelegerea încapsulării în OOPS cu exemple Argumentele liniei de comandă în C explicate Top 10 caracteristici și caracteristici ale cloud computing în 2022
Polimorfismul în Java: concepte, tipuri, caracteristici și exemple Pachete în Java și cum să le folosiți? Tutorial Git pentru începători: Învață Git de la zero

Concluzie

Programarea Java Socket este un instrument esențial care procedează prin utilizarea API-urilor socket pentru a stabili comunicarea între aplicațiile client-server locale și la distanță. Cunoașterea adecvată a programării socket-ului poate îmbunătăți conexiunile server și client.

Dacă doriți să învățați Java și să stăpâniți dezvoltarea full-stack, avem doar cursul de mare impact pentru dvs.: Programul Executive PG de la upGrad în Dezvoltare Software – Specializare în Dezvoltare Full Stack .

Programul de 13 luni de la IIIT-B este conceput pentru a ajuta studenții să dobândească abilități precum Fundamentele informaticii, Procesele de dezvoltare software, API-uri backend și UI interactiv web. Aveți acces la un camp de pregătire pentru tranziția carierei în software atât pentru programatori non-tech, cât și pentru programatori noi, pentru a-și perfecționa abilitățile de programare și asistență în carieră la 360° de la upGrad.

Învață cursuri de dezvoltare software online de la cele mai bune universități din lume. Câștigați programe Executive PG, programe avansate de certificat sau programe de master pentru a vă accelera cariera.

Care sunt beneficiile învățării programării socket Java?

Socket-urile pot fi folosite pentru a construi o aplicație client-server, cum ar fi un chat, din punct de vedere al rețelei. Socket-urile sunt implementate la cel mai elementar nivel de securitate pentru a descoperi dacă porturile unui sistem sunt deschise, dacă există programe standard de scanare de porturi precum Nmap și dacă pot fi utilizate la un nivel scăzut. Ele pot fi utilizate în același mod ca comanda SSH - Secure Socket Shell poate fi utilizată pentru a se conecta la un server extern printr-un shell invers.

Ce face funcția de acceptare?

Funcția de acceptare așteaptă ca un client să se conecteze la server blocând rămânerea acolo până când apare un argument. Apoi folosim funcția getInputStream pentru a obține intrare de la socket. Serverul este proiectat astfel încât să continue să accepte mesajele trimise până când este primită comanda Over.

De ce sunt folosite firele de execuție în programarea în rețea?

Dorim să se alăture mai mulți clienți în același timp. Deci, trebuie să folosim fire de execuție pe partea serverului, astfel încât un fir diferit să poată gestiona fiecare cerere client. Să presupunem o situație în care două solicitări vin la server simultan. Deoarece în aplicația noastră simplă server-client nu este oferită nicio metodă de procesare a mai multor cereri simultan, cererea care sosește chiar și cu o nanosecundă mai devreme se va putea conecta la server, în timp ce cealaltă cerere va fi refuzată.