Sobes.tech
Junior

Kas yra socket?

sobes.tech AI

Atsakymas iš AI

Sąsaja (socket) yra programavimo sąsaja (API) tinklo sąveikai tarp procesų. Ji suteikia abstrakciją darbui su tinklo protokolais, tokiais kaip TCP ir UDP, leidžiant programoms siųsti ir gauti duomenis per tinklą.

Ji yra duomenų mainų taškas. Pavyzdžiui, žiniatinklio serveris gali priimti užklausas iš naršyklių naudodamas sąsajas, o kliento programa gali siųsti duomenis serveriui.

Sąsajos dažniausiai būna dviejų tipų:

  • Srautinės (Stream sockets, SOCK_STREAM): Naudoja TCP protokolą, užtikrina patikimą, tvarkingą duomenų pristatymą. Tinka programoms, kurioms svarbu garantuoti pristatymą, pavyzdžiui, HTTP ar FTP.
  • Dagraminės (Datagram sockets, SOCK_DGRAM): Naudoja UDP protokolą, nesuteikia garantijos dėl pristatymo ir paketų tvarkos. Naudojamos ten, kur svarbus greitis, pavyzdžiui, internetiniai žaidimai ar srautinis vaizdo transliavimas.

Pagrindiniai darbai su sąsajomis tinklo programoje (pavyzdys TCP):

  1. Sąsajos kūrimas: socket() iškvietimas, kad gauti sąsajos deskriptorių.
  2. Pririšimas (Bind): Sąsajos pririšimas prie tam tikro IP adreso ir prievado (serverio sąsajai).
  3. Klausymas (Listen): Serverio sąsajos perkėlimas į laukimo režimą, kol ateis įeinantys ryšiai.
  4. Priėmimas (Accept): Priimti įeinantį ryšį iš kliento, sukurti naują sąsają šiam ryšiui.
  5. Ryšio nustatymas (Connect): Kliento prisijungimas prie serverio per IP adresą ir prievadą.
  6. Siuntimas/Gavimas (Send/Receive): Duomenų mainai per nustatytą ryšį.
  7. Uždarymas (Close): Sąsajos uždarymas darbo pabaigoje.

Python pavyzdys TCP sąsajos kūrimui:

import socket

# TCP/IP sąsajos kūrimas
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Tolimesnės operacijos: bind(), listen(), accept() serveriui
# arba connect() klientui, send(), recv(), close()