[[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 ===== #include #include #include #include #include #include #include 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"); } } 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)