Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:c:halozat

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

oktatas:programozas:c:halozat [2018/07/28 21:57]
oktatas:programozas:c:halozat [2019/08/21 19:01] (aktuális)
admin létrehozva
Sor 1: Sor 1:
 +[[oktatas:​programozás:​c|<​ C]]
 +
 +
 +====== Hálózatprogramozás ======
 +
 +
 +  * **Szerző:​** Sallai András
 +  * Copyright (c) Sallai András, 2011, 2018
 +  * [[https://​creativecommons.org/​licenses/​by-sa/​4.0/​|CC Attribution-Share Alike 4.0 International]]
 +  * Web: http://​szit.hu
 +===== Alapismeretek =====
 +
 +
 +AF_INET
 +
 +Az AF az Address Family szóból alkotott mozaikszó. Címcsaládnak fordíthatnánk. Az INET az IPv4 protokollt jelenti. ​
 +
 +A következő címcsaládok vannak:
 +  * AF_INET -- PF_INET egy szinonima (ARPA Internet protokollok)
 +  * AF_INET6
 +  * AF_UNIX -- PF_UNIX egy szinonima
 +  * AF_UNIX_CCSID
 +  * AF_NS
 +  * AF_TELEPHONY
 +  * PF_IMPLINK -- IMP "host az IMP-nél"​ (link réteg)
 +          ​
 +
 +A következő socketek lehetségesek:​
 +  * SOCK_STREAM -- TCP kapcsolatokhoz
 +  * SOCK_DGRAM -- UDP protokollhoz
 +  * SOCK_RAW ​ -- IP protokollhoz
 +  * SOCK_SEQPACKET -- SPX protokollhoz
 +  * SOCK_RDM -- Nincs implementálva
 +
 +
 +
 +===== Egy TCP szerver C nyelven =====
 +
 +<code c server.c>​
 +#include <​stdio.h>​
 +#include <​stdlib.h>​
 +#include <​string.h>​
 +#include <​unistd.h>​
 +#include <​sys/​types.h>​
 +#include <​sys/​socket.h>​
 +#include <​netinet/​in.h>​
 +
 +main()
 +{
 +    int sockfd, newsockfd, portno, clilen, n;
 +    struct sockaddr_in serv_addr, cli_addr;
 +    char buffer[256];​
 +
 +    sockfd = socket(AF_INET,​ SOCK_STREAM,​ 0);
 +    if(sockfd<​0)
 + error("​HIBA a socket megnyitásakor"​);​
 +
 +    bzero((char *) &​serv_addr,​ sizeof(serv_addr));​
 +    portno = 12345;
 +
 +    serv_addr.sin_family = AF_INET;
 +
 +    serv_addr.sin_port = htons(portno);​
 +    serv_addr.sin_addr.s_addr = INADDR_ANY;
 +
 +    if(bind(sockfd,​ (struct sockaddr *) &​serv_addr,​ sizeof(serv_addr)))
 + error("​HIBA a binding során"​);​
 +    listen(sockfd,​ 1);
 +    clilen = sizeof(cli_addr);​
 +    newsockfd = accept(sockfd,​ (struct sockaddr *) &​cli_addr,​ &​clilen);​
 +    if(newsockfd<​0) error("​HIBA a fogadás során"​);​
 +    bzero(buffer,​ 256);
 +    while(newsockfd)
 +    {
 + n = read(newsockfd,​ buffer, 255);
 + if(n < 0 )
 +     error("​HIBA a socket olvasása során"​);​
 + printf("​%s\n",​ buffer);
 + char uzi[10] = "​uzike\n";​
 + n = write(newsockfd,​ uzi, strlen(uzi));​
 + if(n<0) error("​HIBA a sockat írása során"​);​
 +    }
 +
 +}
 +</​code>​
 +
 +Fordítás:
 +  gcc -o server server.c
 +
 +
 +
 +===== Irodalom =====
 +  * man socket (Debian9)
 +  * http://​www.linuxhowtos.org/​data/​6/​socket.txt (2018)
 +  * http://​www.tenouk.com/​cnlinuxsockettutorials.html (2018)
 +  * http://​www.tenouk.com/​Module39a.html (2018)
 +  * http://​www.tenouk.com/​Module40c.html (2018)
 +  * http://​www.linuxhowtos.org/​C_C++/​socket.htm (2018)
 +  * http://​tldp.org/​HOWTO/​html_single/​TCP-Keepalive-HOWTO/​ (2018)
 +  * http://​www.paulgriffiths.net/​program/​c/​echoserv.php (2018)
 +  * http://​en.wikibooks.org/​wiki/​C_Programming/​Networking_in_UNIX (2018)
 +  * http://​stackoverflow.com/​questions/​10359067/​unix-domain-sockets-on-linux (2018)
 +  * http://​www.tutorialspoint.com/​unix_sockets/​socket_server_example.htm (2018)
 +