无法在UDP中发送完整句子

时间:2017-01-18 16:26:21

标签: c sockets unix

我正在尝试使用udp协议下的套接字Unix API进行通信 当我尝试发送例如"THIS IS A SAMPLE SENTENCE"

的句子时

而另一方面我只收到"THIS"

CLIENT.c

#include<sys/socket.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<unistd.h>

int main() 
{
      int s,b,opt,port,r,len,sntb,recb;
      char server_addr[100],*gets_func;
      struct sockaddr_in server,client;
      char buff[1024];
      printf("Enter the port number for client");
      scanf("%d",&port);

// The socket is now being created
      s=socket(AF_INET,SOCK_DGRAM,0);
      if(s==-1)
      {
            perror("SOCKET NOT CREATED \n");
            exit(0);
      }
      printf("SOCKET SUCCESSFULL ");
      printf("\n Do you wish to input address for client \n 1.YES 2.NO : ");
      scanf("%d",&opt);

      if(opt==1)
      {
          printf("Input the address of ther server :");
          scanf("%s",server_addr);
          printf("%s",server_addr);
          server.sin_addr.s_addr=inet_addr(server_addr);    
      }
      else
      {
          server.sin_addr.s_addr=inet_addr("127.0.0.6");

      }
      server.sin_family=AF_INET;
      server.sin_port=htons(port);
      len=sizeof(client);

      //send sentence
      printf("\n Type message:");
      scanf("%s",buff);

      sntb=sendto(s,buff,sizeof(buff),0,(struct sockaddr*)&server,len);
      if(sntb==-1)
      {
         perror("\nerror sending");
      }

//send word
      printf("\n Type Word:");
      scanf("\n %s",buff);

      sntb=sendto(s,buff,sizeof(buff),0,(struct sockaddr*)&server,len);
      if(sntb==-1)
      {
         perror("\nerror sending");
      }
//accept the sentence
      recb=recvfrom(s,buff,sizeof(buff),0,(struct sockaddr *)&server,&len);
      if(recb==-1)
      {
         printf("\nMessage Recieving Failed");      
      }
      else
      {
         printf("%s",buff);
      }

      printf("\nMessage Recieved: ");
      printf("%s", buff);



      close(s);
 } 

SERVER.c

  #include<sys/socket.h>
  #include<arpa/inet.h>
  #include<stdlib.h>
  #include<stdio.h>
  #include<string.h>
  #include<sys/types.h>
  #include<netinet/in.h>
  #include<unistd.h>


  int main()
  {
        int s,b,opt,port,ns,len,recb,sntb;
        char server_addr[100],*gets_func;
        struct sockaddr_in server,client;
        char sentence[1024],word[10];
        printf("Enter the port number ");
        scanf("%d",&port);

// The socket is now being created
        s=socket(AF_INET,SOCK_DGRAM,0);
        if(s==-1)
        {
            perror("SOCKET NOT CREATED \n");
            exit(0);
        }
        printf("SOCKET SUCCESSFULL ");
        printf("\n Do you wish to input address \n 1.YES 2.NO : ");
        scanf("%d",&opt);

        if(opt==1)
        {

            printf("Input the address of ther server :");
            scanf("%s",server_addr);
            printf("%s",server_addr);
            server.sin_addr.s_addr=inet_addr(server_addr);  
        }
        else
        {
            server.sin_addr.s_addr=inet_addr("127.0.0.6");

        }
        server.sin_family=AF_INET;
        server.sin_port=htons(port);
// Bind the server to the given address

        b=bind(s,(struct sockaddr*)&server,sizeof(server));
        if(b==-1)
        {
            perror("\nBind not successfull");
            exit(0);    
        }
        printf("BIND SUCCESSFULL ");


//accept the sentence   
        int ca=sizeof(client);
        recb=recvfrom(s,sentence,sizeof(sentence),0,(struct sockaddr*)&client,&ca);
        if(recb==-1)
        {
            perror("\nerror receving message : ");
            exit(0);
        }else
        {   
            printf("\n %s", sentence);
        }
        len=sizeof(client);
//accept the word   

        recb=recvfrom(s,word,sizeof(word),0,(struct sockaddr*)&client,&ca);
        if(recb==-1)
        {
            perror("\nerror receving message : ");
            exit(0);
        }else
        {   
            printf("\n %s", word);
        }
        len=sizeof(client);
//omit the word

//send sentence
        sntb=sendto(s,sentence,sizeof(sentence),0,(struct sockaddr *)&client, len);
        if(sntb==-1)
        {
            perror("\nerror sending");
            exit(0);
        }
        printf("\nSent succesfully");
        printf("\n");

  }

你能帮助我理解我如何发送整个句子吗?

1 个答案:

答案 0 :(得分:1)

我正在回答,因为我无法发表评论。 只要遇到scanf("%s", variable);'\n''whitespace'就会接受字符。 您可以使用'scanf("%[^\n]s", variable);'代替字符,直到遇到'\n'字符为止。

问题可能是How do you allow spaces to be entered using scanf?

的可能重复