Reputation: 49
i am trying to make a UDP client/server.. server receive messages from clients but server messages are not reached at the client end.. Please guide me
server :
int main()
{
char message[100];
int sockfd, newsockfd;
struct sockaddr_in my_addr, client_addr;
sockfd=socket(AF_INET, SOCK_DGRAM, 0);
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(1025);
my_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
memset(&(my_addr.sin_zero),'\0',8);
bind(sockfd,(struct sockaddr*)&my_addr,sizeof(my_addr));
perror("bind");
while(1)
{
for(int i=0;i<100;i++)
message[i]=0;
do{
cout<<"Waiting..!!"<<endl;
recvfrom(sockfd,message,sizeof(message),0,(struct sockaddr *)&client_addr,(socklen_t *)&client_addr); // receiving messages to client
cout<<"CLIENT : "<<message<<endl;
cin.getline(message,100);
sendto(sockfd,message,sizeof(message),0,(struct sockaddr *)&client_addr,sizeof(client_addr)); // sending messages to client
}while(strcmp(message,"quit")!=0);
}
close(sockfd);
return 0;
}
this is the client part it runs correctly but does not receiving messages form server and every thing is working well
Client :
int main()
{
int sockfd;
struct sockaddr_in my_addr;
sockfd=socket(AF_INET, SOCK_DGRAM, 0);
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(1025);
my_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
char buffer[100];
do{
cout<<"CLIENT : ";
cin.getline(buffer,100);
sendto(sockfd,buffer,sizeof(buffer),0,(struct sockaddr *) &my_addr,sizeof(my_addr)); // sending messages to server
recvfrom(sockfd,buffer,sizeof(buffer),0,(struct sockaddr *)&my_addr,(socklen_t *)&my_addr); // receiving messages to server
cout<<"SERVER : "<<buffer<<endl;
}while(strcmp(buffer,"quit")!=0);
close(sockfd);
perror("connection");
return 0;
}
Upvotes: 1
Views: 220
Reputation: 182619
You are messing up the client_addr
object:
recvfrom(....,(struct sockaddr *)&client_addr,(socklen_t *)&client_addr);
^^^^^
Try something like:
socklen_t len = sizeof(client_addr);
recvfrom(..., (struct sockaddr *)&client_addr, &len);
Upvotes: 2