Message from udp server can't reach udp client

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • kaustubh87
    New Member
    • Sep 2010
    • 1

    #1

    Message from udp server can't reach udp client

    Code:
    Client code:-
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h> 
    #include <stdio.h>
    #include <sys/unistd.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <strings.h>
    
    
    
    #define STRLEN 1024
    
    int main(int argc, char *argv[]) {
      
      int sockfd, n, slen;
      
      char sendline[STRLEN], recvline[STRLEN];
      struct sockaddr_in servaddr;
      int gethostname(char *name, size_t len);
      struct hostent *h;
      char hostname[128];
      struct sockaddr_in sa;
    
       if(argc != 3) 
      {
        printf("Usage: %s <Enter Server Address> <Enter port no >\n", argv[0]);
        exit(0);
      }
        
    
       gethostname(hostname, sizeof hostname);
       printf("\n\nYou are connected from:- %s\n", hostname);
    
      /* create hostent structure from  user entered host name*/
      if ( (h = gethostbyname(argv[1])) == NULL)
      {
        printf("\n%s: error in gethostbyname()", argv[0]);
        exit(0);
      }
    
    
      /* create server address structure */
      bzero(&servaddr, sizeof(servaddr)); /* initialize it */
      servaddr.sin_family = AF_INET;
      servaddr.sin_addr.s_addr = htonl(inet_addr(argv[1]));
      servaddr.sin_port = htons(atoi(argv[2])); /* get the port number from argv[2]*/
    
     if ( (sockfd = socket(AF_INET,SOCK_DGRAM, 0)) < 0) 
    
      {
        printf("\n%s: error in socket()", argv[0]);
        exit(0);
      }
    
    
    
      printf("\nEnter The name of the file you want to search:- ");
      scanf("%s",sendline);
          
      if (sendto(sockfd, sendline, sizeof(sendline), 0, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) 
         {
          printf("\n%s: error in sendto()", argv[0]);
          exit(0);
      
          }
    
      slen = sizeof(servaddr);
      if ( (n = recvfrom(sockfd, recvline, STRLEN, 0, (struct sockaddr *) &servaddr, &slen)) < 0) {
          printf("\n%s: error in recvfrom()", argv[0]);
          exit(0);
      }
    
     recvline[n] = 0;
    
      
      fputs(recvline, stdout);
    
      close(sockfd);
    
    }
    
    
    
    Server Code:-
    
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <strings.h>
    #include <sys/stat.h>
    #include <fcntl.h>
           
    #define STRLEN 1024
    
    int main(int argc, char *argv[]) {
      
      int sockfd, clen, n;
      struct sockaddr_in servaddr, cliaddr; 
      struct stat buffer;
      int status;
      char a[50];
      struct stat m;
    
    
      char str_in[STRLEN];
    
      if (argc != 2) {
        printf("\nUsage: %s < Enter port no>", argv[0]);
        exit(0);
      }
    
    
      /* socket creation */
      if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        printf("\n%s: error in socket()", argv[0]);
        exit(0);
      }
      
      /* create local server socket structure */
      bzero(&servaddr, sizeof(servaddr));
      servaddr.sin_family = AF_INET;
      servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 
      servaddr.sin_port = htons(atoi(argv[1]));
    
      /* bind it to an address */
      if (bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr))< 0)
     {
        printf("\n%s: error in bind()", argv[0]);
        exit(0);
      }
    
       clen = sizeof(cliaddr);
      if ( (n = recvfrom(sockfd, str_in, STRLEN, 0, (struct sockaddr *) &cliaddr, &clen)) < 0) {
        printf("\n%s: error in recvfrom()", argv[0]);
        exit(0);
      }
    printf("%s\n",str_in);
    
       sprintf (a,"data/%s", str_in);
       printf("%s\n",a);
       status= stat( a, &buffer );
       
       if (status ==0)
         {
           printf("File found");
           sprintf(str_in,"%s",buffer.st_size);
         }
    else
         {
           printf("File not found");
           sprintf(str_in,"0");
         }
    
    if (sendto(sockfd,str_in,n, 0, (struct sockaddr *) &cliaddr, clen) < 0) {
        printf("\n%s: error in sendto()", argv[0]);
        exit(0);
      }
    
    
    
    
    
      close(sockfd);
    
    }
  • weaknessforcats
    Recognized Expert Expert
    • Mar 2007
    • 9214

    #2
    Have you stepped through this using your debugger?

    It's what I would have to do.

    Comment

    Working...