Pistokkeiden yleiskatsaus
Verkkoliikenteen perusteet.
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/htonlisäntäkoneesta verkkoon (short/long)ntohs/ntohlverkosta 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 socketinbind()liittää sen osoitteeseen ja porttiinlisten()merkitsee sen passiiviseksiaccept()vastaanottaa yhteyden
Asiakkaan kutsujärjestys
TCP-asiakas on yksinkertaisempi:
socket()luo socketinconnect()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_inyhdessä funktioidenhtonsjainet_ptonkanssa - Palvelin: socket, bind, listen, accept. Asiakas: socket, connect
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
- Pistokkeiden yleiskatsaus
- TCP-palvelin
- TCP-asiakas
- Useiden asiakkaiden käsittely