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
Post a Comment