C Socket programming -


i new c programming. tried basic socket programming. working problem created linked list store sent , received messages. when print linked list sent messages(ptr3->request) displayed , received message (ptr3->response) empty.

i think passing of arguments making mistake. but, in both case passing address only. cannot figure out mistake.

code snippet:

#include<stdio.h> #include<string.h>    #include<sys/socket.h> #include<arpa/inet.h>  #include<time.h> #include<errno.h> #include<stdlib.h>  void create(char*,char*); void insert(char*,char*); void send_receive(char*,int); void display();  struct packet_details { char *request; char *response; struct packet_details *next; };  typedef struct packet_details details; details *head = null ,*temp = null;  void create(char *send,char *receive) {     details *new_node;     new_node= (details*)malloc(sizeof( details));      if(null == new_node)     {         printf("cannot allocate requested memory %d %s %s",__line__,__file__,__function__);     }      else     {         new_node->request= send;         new_node->response = receive;         new_node->next = null;          head = temp = new_node;     } }  void insert(char *send,char *receive) {     details *new_node;     if(null == head)     {         create(send,receive);         return;     }     new_node= (details*)malloc(sizeof( details));          new_node->request = send;         new_node->response = receive;         new_node->next = null;         temp->next = new_node;        temp = new_node; }  void display() {     details *ptr3;     ptr3 = head;     while(null != ptr3)     {         printf("\n**********************************\n");         printf("\n**********************************\n");          printf("\n%s",ptr3->request);         printf("\n%s",ptr3->response);          printf("\n***********************************\n");         printf("\n***********************************\n");         ptr3=ptr3->next;     } }  int main() {     int socket_desc,a=0;     struct sockaddr_in server;     char *message;      //create socket     socket_desc = socket(af_inet , sock_stream , 0);     if (socket_desc == -1)     {         printf("could not create socket! %s\n",strerror(errno));     }      server.sin_addr.s_addr = inet_addr("127.0.0.1");     server.sin_family = af_inet;     server.sin_port = htons(7887);      //connect server     if (connect(socket_desc , (struct sockaddr *)&server , sizeof(server)) < 0)     {         printf("connect error ! %s\n",strerror(errno));         return 1;     }      puts("connected\n");      while(a < 5 )     {     printf("\nclient:");     message =  "hello server\n";     printf("%s",message);     send_receive(message,socket_desc);     a++;      sleep(10);      printf("\nclient:");     message =  "how you?\n";     printf("%s",message);     send_receive(message,socket_desc);     a++;      sleep(10);      printf("\nclient:");     message =  "are busy?\n";     printf("%s",message);     send_receive(message,socket_desc);     a++;      sleep(10);      printf("\nclient:");     message =  "process request\n";     printf("%s",message);     send_receive(message,socket_desc);     a++;      sleep(10);      printf("\nclient:");     message =  "bye\n";     printf("%s",message);     send_receive(message,socket_desc);     a++;     }      close(socket_desc);     return 0; }    void send_receive(char *msg,int socket_desc)     {     char server_reply[2000];     char *reply;     if(write(socket_desc,msg,strlen(msg))<0)     {     printf("\n data not sent");     }     read(socket_desc,server_reply,sizeof(server_reply));     printf("server:%s",server_reply);     reply = &server_reply[0];     insert(msg,reply);  /* passing of 2 addresses arguments */ } 

could me please?

every time call insert, you're passing in address of buffer allocated on stack, i.e. server_reply, , saving in list. then, when send_receive exist, memory points garbage.

instead of doing this:

new_node->request= send; new_node->response = receive; 

do this:

new_node->request= strdup(send); new_node->response = strdup(receive); 

that makes copy of sent/recieved data in newly allocated buffer. sure free() of memory when clean up.


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -