C Academy · Oppitunti

Pistokkeiden yleiskatsaus

Verkkoliikenteen perusteet.

Oppitunti 1/413 vaihetta

Pistokkeiden yleiskatsaus on ilmainen C Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C Academy-kurssilla on yhteensä 4 oppituntia.

Mikä on socket

Socket on verkkoviestinnän päätepiste. POSIX-järjestelmissä se on tiedostokuvaaja, josta voidaan lukea ja johon voidaan kirjoittaa, joten kaksi ohjelmaa voi vaihtaa tietoja verkon tai saman koneen kautta.

Asiakas–palvelinmalli

Useimmat verkkosovellukset käyttävät asiakas–palvelinmallia:

  • Palvelin sitoutuu osoitteeseen ja odottaa yhteyksiä
  • Asiakas aloittaa yhteyden palvelimeen

Yhteyden muodostamisen jälkeen molemmat osapuolet lähettävät ja vastaanottavat tietoja.

TCP ja UDP

Kaksi keskeistä siirtoprotokollaa:

  • TCP (SOCK_STREAM): luotettava, järjestyksen säilyttävä ja yhteyspohjainen
  • UDP (SOCK_DGRAM): nopea ja yhteydetön; paketit voivat kadota tai vaihtaa järjestystä

Käyttäkää TCP:tä oikeellisuutta vaativaan viestintään ja UDP:tä pienen viiveen suoratoistoon.

Socketin luominen

Kutsu socket() palauttaa tiedostokuvaajan. Argumentit ovat osoiteperhe (AF_INET IPv4:ää varten), tyyppi (SOCK_STREAM TCP:tä varten) ja protokolla (oletusarvolle 0).

/* Conceptual: sockets need a network environment to run */
#include <sys/socket.h>
#include <netinet/in.h>

int create_tcp_socket(void) {
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    /* fd < 0 means error; check with perror */
    return fd;
}

Socket-osoiterakenteet

IPv4-osoite kuvataan rakenteella struct sockaddr_in, joka sisältää osoiteperheen, portin ja IP-osoitteen. Funktiot käyttävät yleistä tyyppiä struct sockaddr *, joten osoitin on muunnettava.

#include <netinet/in.h>

void fill_addr(struct sockaddr_in *addr, unsigned short port) {
    addr->sin_family = AF_INET;
    addr->sin_port = htons(port);      /* host to network short */
    addr->sin_addr.s_addr = INADDR_ANY; /* all interfaces */
}

Tavujärjestyksellä on merkitystä

Verkot käyttävät big-endian-järjestystä eli verkkotavujärjestystä. Muuntakaa arvot seuraavasti:

  • htons / htonl isäntäkoneesta verkkoon (short/long)
  • ntohs / ntohl verkosta isäntäkoneelle

Muuntaa aina portit ja osoitteet, tai yhteys muodostuu väärään kohteeseen.

IP-osoitteen muuntaminen

inet_pton muuntaa tekstimuotoisen IP-osoitteen, kuten "127.0.0.1", binaarimuotoon, joka tallennetaan kohteeseen sin_addr, ja inet_ntop muuntaa sen takaisin tulostamista varten.

#include <arpa/inet.h>
#include <netinet/in.h>

int set_ip(struct sockaddr_in *addr, const char *ip) {
    return inet_pton(AF_INET, ip, &addr->sin_addr); /* returns 1 on success */
}

Palvelimen kutsujärjestys

TCP-palvelin kutsuu yleensä seuraavia funktioita tässä järjestyksessä:

  • socket() luo socketin
  • bind() liittää sen osoitteeseen ja porttiin
  • listen() merkitsee sen passiiviseksi
  • accept() vastaanottaa yhteyden

Asiakkaan kutsujärjestys

TCP-asiakas on yksinkertaisempi:

  • socket() luo socketin
  • connect() ottaa yhteyden palvelimen osoitteeseen

Sen jälkeen samalla kuvaajalla voidaan kutsua funktioita send ja recv.

Lähettäminen ja vastaanottaminen

Käyttäkää funktioita send() ja recv() (tai yleisiä funktioita write() ja read()). Kumpikin voi siirtää pyydettyä määrää vähemmän tavuja, joten oikeassa ohjelmassa silmukan on käsiteltävä kaikki tiedot.

Tarkistakaa aina paluuarvot

Jokainen socket-kutsu voi epäonnistua. Paluuarvo -1 asettaa muuttujan errno; ilmoittakaa virhe kutsumalla funktiota perror. Arvo 0 funktion recv palautuksena tarkoittaa, että vertaisosapuoli sulki yhteyden. Luotettava verkkokoodi perustuu virheiden tarkistamiseen.

Pikatarkistus

Testatkaa, miten hyvin ymmärrätte socketien perusteet.

Kertaus

Opitte socket-ohjelmoinnin perusteet.

  • Socket on verkon päätepiste ja tiedostokuvaaja
  • Asiakas–palvelinmallissa käytetään TCP:tä (luotettava) tai UDP:tä (nopea)
  • Käyttäkää tyyppiä sockaddr_in yhdessä funktioiden htons ja inet_pton kanssa
  • Palvelin: socket, bind, listen, accept. Asiakas: socket, connect
Aloita maksutta

Opi C tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
39
Oppitunnit
144

Usein kysytyt kysymykset

Onko oppitunti ”Pistokkeiden yleiskatsaus” ilmainen?

Kyllä – oppitunnin ”Pistokkeiden yleiskatsaus” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C Academy-kurssin, päivitä CoddyKit PROhon. C Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Pistokkeiden yleiskatsaus”?

Verkkoliikenteen perusteet. Harjoittelet C Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Pistokkeiden yleiskatsaus”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C Academy-oppitunnilla?

Kyllä. Jokainen C Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Pistokkeiden yleiskatsaus
  2. TCP-palvelin
  3. TCP-asiakas
  4. Useiden asiakkaiden käsittely
← Takaisin: C Academy