/*H******************************************************************************** * Ime datoteke: serverLinux.cpp * * Opis: * Enostaven strežnik, ki zmore sprejeti le enega klienta naenkrat. * Strežnik sprejme klientove podatke in jih v nespremenjeni obliki pošlje * nazaj klientu - odmev. * *H*/ //Vključimo ustrezna zaglavja #include #include #include #include /* Definiramo vrata (port) na katerem bo strežnik poslušal in velikost medponilnika za sprejemanje in pošiljanje podatkov */ #define PORT 10000 #define BUFFER_SIZE 256 int main(int argc, char **argv){ //Spremenjlivka za preverjane izhodnega statusa funkcij int iResult; /* Ustvarimo nov vtič, ki bo poslušal in sprejemal nove kliente preko TCP/IP protokola */ int listener=socket(AF_INET, SOCK_STREAM, 0); if (listener == -1) { printf("Error creating socket\n"); return 1; } //Nastavimo vrata in mrežni naslov vtiča sockaddr_in listenerConf; listenerConf.sin_port=htons(PORT); listenerConf.sin_family=AF_INET; listenerConf.sin_addr.s_addr=INADDR_ANY; //Vtič povežemo z ustreznimi vrati iResult = bind( listener, (sockaddr *)&listenerConf, sizeof(listenerConf)); if (iResult == -1) { printf("Bind failed\n"); close(listener); return 1; } //Začnemo poslušati if ( listen( listener, 5 ) == -1 ) { printf( "Listen failed\n"); close(listener); return 1; } //Definiramo nov vtič in medpomnilik int clientSock; char buff[BUFFER_SIZE]; /* V zanki sprejemamo nove povezave in jih strežemo (največ eno naenkrat) */ while (1) { //Sprejmi povezavo in ustvari nov vtič clientSock = accept(listener,NULL,NULL); if (clientSock == -1) { printf("Accept failed\n"); close(listener); return 1; } //Postrezi povezanemu klientu do{ //Sprejmi podatke iResult = recv(clientSock, buff, BUFFER_SIZE, 0); if (iResult > 0) { printf("Bytes received: %d\n", iResult); //Vrni prejete podatke pošiljatelju iResult = send(clientSock, buff, iResult, 0 ); if (iResult == -1) { printf("send failed!\n"); close(clientSock); break; } printf("Bytes sent: %d\n", iResult); } else if (iResult == 0) printf("Connection closing...\n"); else{ printf("recv failed!\n"); close(clientSock); break; } } while (iResult > 0); close(clientSock); } //Počistimo vse vtiče close(listener); return 0; }