Socket UDP un socket, diferite porturi

Sunt nou în programarea socketului, așa că scuzați-mă dacă această întrebare este de bază; Nu am găsit un răspuns nicăieri.

Ce înseamnă necesitatea unei noi prize?

De exemplu, pare posibil să trimiteți și să primiți cu același socket fd pe același port. Ați putea trimite pe portul XXXX și primi pe portul YYYY cu un singur soclu? Dacă nu, atunci socket-urile sunt specifice combinațiilor gazdă/port?

Mulțumesc pentru înțelegere!


person Rece    schedule 10.10.2013    source sursă


Răspunsuri (2)


Un socket stabilește un „punct final”, care constă dintr-o adresă IP și un port:

Da, un singur socket este specific unei singure combinații gazdă/port.

RECOMANDARE DE CITIRE:

Ghidul lui Beej pentru programarea în rețea:

Programare în rețea Unix: Stevens și colab:

person paulsm4    schedule 10.10.2013
comment
Da: un socket trimite și primește pe un singur port; un alt soclu ar putea trimite și primi pe un alt port. Un client se conectează pe un port bine cunoscut (de exemplu, 80 pentru http). Odată stabilită conexiunea, comunicarea are loc pe un port efemer. - person paulsm4; 10.10.2013

Numărul de port este o proprietate locală și ajută la identificarea unui punct final de socket pentru datele de intrare destinate portului respectiv de pe computerul receptor. Fiecare mașină are 64K porturi pentru fiecare tip de protocol (TCP sau UDP) și pentru fiecare tip de familie (IPv4 sau IPv6).

Cu UDP, este posibil să trimiteți (și să primiți de la) mulți clienți aflați pe diferite porturi. Deci, pentru următoarea conexiune:

UDP_socketA (port p1) <---------> UDP socketB (port p2)
     |
     |
     |
     |
UDP socketC (port p3)

Astfel, socketA poate trimite date către socketB și socketC chiar dacă acestea se află pe numere de porturi diferite. Modul în care funcționează este că, cu socket-urile UDP, folosim de obicei API sendto() care ne permite să specificăm o adresă IP și un număr de port pentru fiecare pachet. Astfel, putem trimite un pachet la portul B și următorul pachet la portul C și ce nu.

Cu TCP, totuși, acesta nu este cazul. Odată ce o conexiune este stabilită, să spunem între socketA și socketB, atunci nu există nicio modalitate, oricare dintre aceste prize poate vorbi cu socketC

TCP_socketA (port p1) <---------> TCP socket B (port p2)
         |
         |
         |
         |
    TCP socketC (port p3)
person Manoj Pandey    schedule 10.10.2013