我正在尝试使用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");
}
你能帮助我理解我如何发送整个句子吗?
答案 0 :(得分:1)
我正在回答,因为我无法发表评论。
只要遇到scanf("%s", variable);
或'\n'
,'whitespace'
就会接受字符。
您可以使用'scanf("%[^\n]s", variable);'
代替字符,直到遇到'\n'
字符为止。