C Socket Programming: HTTP request not working continously -


i newbie c socket programming , c itself. have written small piece of code reads raw input internet socket , post data webserver. received data numeric. problem seems http post request happens once instead of running in loop , program terminates.

following code example

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <netdb.h>  //define server parameters #define webip       "172.16.100.2"       int main() {         //declare variables         struct sockaddr_in my_addr,client_addr,server_addr;         struct hostent *server_host;         int true=1;         int client_socket_id,server_socket_id;         int client_id;int sin_size;         int client_bytes_received;         char send_data [1024],recv_data[1024],post_data[1024];                 server_host=gethostbyname(webip2);          //create socket listen client         if ((client_socket_id = socket(af_inet, sock_stream, 0)) == -1) {             perror("error creating socket");             exit(1);         }         if (setsockopt(client_socket_id,sol_socket,so_reuseaddr,&true,sizeof(int)) == -1) {             perror("setsockopt");             exit(1);         }         //create socket connect webserver         if ((server_socket_id = socket(af_inet, sock_stream, 0)) == -1) {             perror("error creating webserver socket");             exit(1);             }          my_addr.sin_family = af_inet;                  my_addr.sin_port = htons(7070);              my_addr.sin_addr.s_addr = inaddr_any;          //bzero(&(my_addr.sin_zero),8);          bzero(&(server_addr.sin_zero),8);          server_addr.sin_family = af_inet;                  server_addr.sin_port = htons(webport);              server_addr.sin_addr = *((struct in_addr *)server_host->h_addr);              //bind socket         if (bind(client_socket_id, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1) {             perror("unable bind");             exit(1);         }          //listen socket         if (listen(client_socket_id, 5) == -1) {             perror("error listening socket");             exit(1);         }          printf("\n\r waiting client on port 7070");         fflush(stdout);           while(1)         {                sin_size = sizeof(struct sockaddr_in);             client_id = accept(client_socket_id, (struct sockaddr *)&client_addr,&sin_size);             printf("\n got connection (%s , %d)",                    inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));              //connect remote server             if (connect(server_socket_id, (struct sockaddr *)&server_addr,sizeof(struct sockaddr)) == -1)                  {                     perror("error connecting web server");                     exit(1);                 }               while(1){              //send data client             send(client_id,"hello, world!",13, 0);              //receive data client             client_bytes_received=recv(client_id,recv_data,1024,0);             recv_data[client_bytes_received] = '\0';             //print received_data             int c_length=strlen(recv_data)+11;             printf("\n\rrecieved data (%d bytes %d words)= %s " , client_bytes_received,c_length,recv_data);             //post dta webserver             fflush(stdout);             bzero(&post_data,1024);             sprintf(post_data,"post /environment.php http/1.1\r\n"                             "host: 172.16.100.2\r\n"                             "user-agent: c example client\r\n"                             "content-type: application/x-www-form-urlencoded\r\n"                             "content-length: %d\r\n\r\n"                             "track_data=%s",c_length,recv_data);             write(server_socket_id,post_data,strlen(post_data)+1);              bzero(&recv_data,1024);               while((client_bytes_received=read(server_socket_id,recv_data,1024))>0){             recv_data[client_bytes_received] = '\0';                 if (fputs(recv_data,stdout)==eof)                     perror("web server read_error");                 }             //print received_data             printf("\n\rrecieved data webserver (%d)= %s " , client_bytes_received,recv_data);             //             bzero(&recv_data,1024);             fflush(stdout);             }         }           close(client_id);      close(client_socket_id);     return 0; }  

i have not done socket programming years, please bear me. need connect, process, , disconnect? that's first thing came mind reading code.


Comments