#include #include #include #include #include #include #include #include #include #include int main(int argc, char **argv) { const int port = 7332; struct sockaddr_in myaddr, endpoint; int sdsocket, sdconnection, addrlen, sdconnection2, n, rec; char odbior[512]; struct dirent **namelist; char name_file[512]; char names_files[512]; sdsocket = socket(AF_INET, SOCK_STREAM, 0); addrlen = sizeof(struct sockaddr_in); myaddr.sin_family = AF_INET; myaddr.sin_port = htons(port); myaddr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(sdsocket, (struct sockaddr *)&myaddr, addrlen) < 0) { printf("bind() nie powiodl sie (failed)\n"); return 1; } if (listen(sdsocket, 10) < 0) { printf("listen() nie powiodl sie (failed)\n"); return 1; } /*while ((sdconnection = accept(sdsocket, (struct sockaddr *)&endpoint, &addrlen)) >= 0) { printf("Connected\n"); send(sdconnection, "CONNECT", 7, 0); close(sdconnection); break; }*/ while (1) { while ((sdconnection = accept(sdsocket, (struct sockaddr *)&endpoint, &addrlen)) >= 0) { printf("CONNECT FROM : %s\n ", inet_ntoa(endpoint.sin_addr)); bzero(odbior, 512); rec = recv(sdconnection, odbior, 512, 0); close(sdconnection); if (strncmp("GET_ALL_FILES", odbior, 13) == 0) { printf("Sending list of names files\n"); bzero(names_files, 512); bzero(name_file, 512); n = scandir(".", &namelist, NULL, alphasort); if (n == -1) { perror("scandir"); exit(EXIT_FAILURE); } while (n--) { sprintf(name_file, "%s\n", namelist[n]->d_name); strcat(names_files, name_file); free(namelist[n]); } free(namelist); while ((sdconnection2 = accept(sdsocket, (struct sockaddr *)&endpoint, &addrlen)) >= 0) { send(sdconnection2, names_files, 512, 0); close(sdconnection2); break; } } else if (strncmp("EXIT", odbior, 4) == 0) { printf("Server shut down..\n"); close(sdsocket); return 0; } else if (strncmp("FTP", odbior, 3) == 0) { bzero(name_file, 512); strncpy (name_file, odbior+4, 509); printf("Plik do wyslania :%s\n", name_file); while ((sdconnection2 = accept(sdsocket, (struct sockaddr *)&endpoint, &addrlen)) >= 0) { send(sdconnection2, name_file, 512, 0); close(sdconnection2); break; } } else { printf("Wrong query\n %s nie istnieje\n", odbior); while ((sdconnection2 = accept(sdsocket, (struct sockaddr *)&endpoint, &addrlen)) >= 0) { send(sdconnection2, "wrong query", 512, 0); close(sdconnection2); break; } } } } close(sdsocket); return 0; }