ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΡΠ΅ΠΊΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <fcntl.h>#include <netdb.h>/* ΠΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ */#define PORTNUM 1500main(argc, argv)int argc;char *argv[];{Β int s, ns;Β int pid;Β int nport;Β struct sockaddr_in serv_addr, clnt_addr;Β struct hostent* hp;Β char buf[80], hname[80];Β /* ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π±Π°ΠΉΡΠΎΠ²Β Β Β ΠΊ ΡΠ΅ΡΠ΅Π²ΠΎΠΌΡ ΡΠΎΡΠΌΠ°ΡΡ */Β nport = PORTNUM;Β nport = htons((u_short)nport);Β /* Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΎΠΊΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» TCP */Β if ((s=socket(AF_INET, SOCK_STREAM, 0))==-1) {Β perror("ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ·ΠΎΠ²Π° socket()");Β exit(1);Β }Β /* ΠΠ°Π΄Π°Π΄ΠΈΠΌ Π°Π΄ΡΠ΅Ρ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π° */Β bzero(&serv_addr, sizeof(serv_addr));Β serv_addr.sin_family = AF_INET;Β serv_addr.sin_addr.s_addr = INADDR_ANY;Β serv.addr.sin_port = nport;Β /* Π‘Π²ΡΠΆΠ΅ΠΌ ΡΠΎΠΊΠ΅Ρ Ρ ΡΡΠΈΠΌ Π°Π΄ΡΠ΅ΡΠΎΠΌ */Β if (bind(s, struct sockaddr*)&serv_addr,Β sizeof(serv_addr))==-1) {Β perror("ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ·ΠΎΠ²Π° bind()");Β exit(1);Β }Β /* ΠΡΠ²Π΅Π΄Π΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π°Π΄ΡΠ΅ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° */Β fprintf(stderr, "Π‘Π΅ΡΠ²Π΅Ρ Π³ΠΎΡΠΎΠ²: %s\n",Β inet_ntoa(serv_addr.sin_addr));Β /* Π‘Π΅ΡΠ²Π΅Ρ Π³ΠΎΡΠΎΠ² ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π°ΠΏΡΠΎΡΡΒ Β Β Π½Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.Β Β Β ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ
ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ β 5.Β Β Β ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΏΠ΅ΡΡΒ Β Β Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ accept(2) ΠΈ ΠΏΠΎΡΠΎΠ΄ΠΈΡΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ */Β if (listen(s, 5)==-1) {Β perror("ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ·ΠΎΠ²Π° listen()");Β exit(1);Β }Β /* ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ ΠΈΡ
ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ */Β while (1) {Β int addrlen;Β bzero(&clnt_addr, sizeof(clnt_addr));Β addrlen = sizeof(clnt_addr);Β /* ΠΡΠΈΠΌΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡ. ΠΠΎΠ²ΡΠΉ ΡΠΎΠΊΠ΅Ρ ns ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΒ Β Β Β ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ ΡΠ·Π»ΠΎΠΌ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° */Β if ((ns=accept(s, (struct sockaddr*)&clnt_addr,Β Β &addrlen))==-1) {Β Β perror("ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ·ΠΎΠ²Π° accept()");Β Β exit(1);Β }Β /* ΠΡΠ²Π΅Π΄Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅ */Β fprintf(stderr, "ΠΠ»ΠΈΠ΅Π½Ρ = %s\n",Β Β inet_ntoa(clnt_addr.sin_addr));Β /* Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ */Β if ((pid=fork())==-1) {Β Β perror("ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ·ΠΎΠ²Π° fork()");Β Β exit(1);Β }Β if (pid==0) {Β Β int nbytes;Β Β int fout;Β Β Β /* ΠΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ: ΡΡΠΎΡ ΡΠΎΠΊΠ΅Ρ Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ΅Π½. ΠΠ½Β Β Β Β Β ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² */Β Β close(s);Β Β /* ΠΠΎΠ»ΡΡΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ Π΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ */Β Β while ((nbytes = recv(ns, buf, sizeof(buf), 0)) !=0) {Β Β Β send(ns, buf, sizeof(buf), 0);Β Β }Β Β close(ns);Β Β exit(0);Β }Β /* Π ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ: ΡΡΠΎΡ ΡΠΎΠΊΠ΅Ρ Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ΅Π½. ΠΠ½Β Β Β Β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ */Β close(ns);Β }}#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <fcntl.h>#include <netdb.h>