Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/socket.h>
- #include <netdb.h>
- #include <string.h>
- #include <unistd.h>
- #include <time.h>
- #define PORT 1111
- int main(void) {
- int exitStatus, pocitadlo, deteg;
- char buf[2048];
- char *cas, *kurzor;
- char hladam[] = "Nick: ";
- char *poslem = "who";
- struct addrinfo *adresaInfo;
- struct addrinfo adresaNastavenia;
- FILE *filePTR;
- time_t timestamp;
- memset(&adresaNastavenia, 0, sizeof adresaNastavenia); //vynulujeme adresaNastavenia
- adresaNastavenia.ai_family = AF_INET; //pojdeme IPV4
- adresaNastavenia.ai_socktype = SOCK_STREAM; //cez protokol TCP
- adresaNastavenia.ai_flags = AI_PASSIVE; //adresa sa doplni automaticky systemom
- filePTR = fopen("vystup.txt", "w"); //skusime otvorit na pisanie
- if (filePTR == NULL) { //podarilo sa otvorit subor na pisanie?
- perror("Function \"fopen\" on file \"vystup.txt\" failed"); //nie, tak sa postazujeme menoFunkcie+perror
- exit(EXIT_FAILURE); //a skoncime
- } //if (filePTR == NULL)
- int socketFD = socket(AF_INET, SOCK_STREAM, 0); //FD socketu
- if (socketFD < 0) { //ak sa nepodarilo
- perror("Function \"socket\" failed"); //menoFunkcie+perror
- exit(EXIT_FAILURE); //skoncime
- } //if (socketFD < 0)
- exitStatus = getaddrinfo("nastalker.sk", "1111", &adresaNastavenia, &adresaInfo); //ziskajme z hostname IP
- if (exitStatus != 0) { //prebehlo vsetko OK?
- if (exitStatus != EAI_SYSTEM) //nie jesystem error?
- fprintf(stderr, "Function \"getaddrinfo\" failed: %s\n", gai_strerror(exitStatus)); //tak pouzi gai_strerror
- else //system error
- perror("Function \"getaddrinfo\" failed"); //tak menoFunkcie+perror
- exit(EXIT_FAILURE); //skoncime
- } //if (exitStatus != 0)
- exitStatus = connect(socketFD, adresaInfo->ai_addr, adresaInfo->ai_addrlen); //skusime nadviazat spojenie
- if(exitStatus != 0) { //podarilo sa nadviazat spojenie
- perror("Function \"connect\" failed"); //menoFunkcie+perror
- exit(EXIT_FAILURE); //skoncime
- } //if(exitStatus != 0)
- deteg = 2; //nastavime sa na zbehnutie nasledneho cyklu
- while (deteg) {
- pocitadlo = recv(socketFD, buf, sizeof buf, 0); //skusime nieco nacitat zo socketu
- timestamp = time(NULL); //zapiseme terajsi cas
- if (timestamp == -1) { //podarilo sa zapisat cas?
- perror("Function \"time\" failed"); //menoFunkcie+perror
- exit(EXIT_FAILURE); //skoncime
- } //if (timestamp == -1)
- fprintf(filePTR, "%s", ctime(×tamp)); //do suboru zapiseme timestamp
- fprintf(filePTR, "%s\n", buf); //do suboru zapiseme prijate znaky
- kurzor = strstr(buf, hladam); //skusme najst hladany string v prijatom
- memset(&buf, 0, sizeof buf); //vynulujeme buffer
- if (kurzor != NULL) { //nasli sme hladany retazec cez strstr()?
- if (deteg == 2) {
- strcpy (buf, poslem); //ano, tak do buffera dam string, co treba poslat
- exitStatus = send(socketFD, buf, sizeof buf, 0); //skusim to poslat
- if (exitStatus == -1) //ak sa nepodarilo poslat
- perror("Function \"send\" failed"); //menoFunkcie+perror
- } //if (deteg == 2)
- deteg-- ;
- } //if (kurzor != NULL)
- } //while (deteg)
- exitStatus = fclose(filePTR); //skusime zavriet subor
- if (exitStatus != 0) { //ak sa nepodarilo
- perror("Function \"fclose\" failed"); //menoFunkcie+perror
- exit(EXIT_FAILURE); //skoncime
- } //if (exitStatus != 0)
- exitStatus = close(socketFD); //skusime zavriet socket
- if(exitStatus != 0) { //ak sa nepodarilo
- perror("Function \"close\" failed"); //menoFunkcie+perror
- exit(EXIT_FAILURE); //skoncime
- } //if(exitStatus != 0)
- freeaddrinfo(adresaInfo); //uvolnime pamat
- exit(EXIT_SUCCESS); //uspesne skoncime
- }
Add Comment
Please, Sign In to add comment