#include #include #include #include #include #include #include #include #include #include #define SIZE 1024 void write_file(int socket_server){ int n; FILE *plik; char *nazwa_pliku = "recv.txt"; char buffer[SIZE]; plik = fopen(nazwa_pliku, "w"); while (1) { n = recv(socket_server, buffer, SIZE, 0); if (n <= 0){ break; return; } fprintf(plik, "%s", buffer); bzero(buffer, SIZE); } return; } void handle_ctrlc(int signal){ printf("Przerwano prace serwera przez uzycie CTRL+C.\n"); exit(0); } int main(){ char *ip = "127.0.0.1"; int port = 8080; int e; pid_t pid; int socket_server, socket_client; struct sockaddr_in server_addr, new_addr; socklen_t addr_size; signal (SIGINT, handle_ctrlc); char buffer[SIZE]; socket_server = socket(AF_INET, SOCK_STREAM, 0); if(socket_server < 0) { printf("BLAD SOCKETU SERWERA."); exit(1); } printf("Socket serwera utworzony.\n"); server_addr.sin_family = AF_INET; server_addr.sin_port = port; server_addr.sin_addr.s_addr = inet_addr(ip); e = bind(socket_server, (struct sockaddr*)&server_addr, sizeof(server_addr)); if(e < 0) { printf("BLAD BIND SERWERA."); exit(1); } printf("Bind przeprowadzony pomyslnie.\n"); n = listen(socket_serv, 10); if(n==0){ printf("Gniazdo serwera nasluchuje...\n"); }else{ printf("BLAD NASLUCHIWANIA."); exit(1); } while(1){ printf("Server oczekuje...\n"); addr_size = sizeof(new_addr); if (socket_client<0){ printf("BLAD SOCKETU SERWERA."); exit(1); } pid = fork(); if(pid == 0){ printf("Nawiazano polaczenie z klientem.\n"); addr_size = sizeof(new_addr); socket_client = accept(socket_server, (struct sockaddr*)&new_addr, &addr_size); write_file(socket_client); printf("Pomyslnie zapisano plik.\n"); if(close(socket_client) == 0){ printf("Polaczenie z klientem zakonczono.\n"); }else{ printf("BLAD - nie zakonczono polaczenia\n"); } break; } } return 0; }