Hi,
I have a server running on one linux system. The client sends UDP
packets. It has two options---one is send broadcast address and other
is send the address of the server system if known.
How to detect at the server side that what address is sent by the
client?
My server program is below:
if((sfd=socket(AF_INET,SOCK_DGRAM,0))<0)
errexit("cant open stream\n");
memset(&srvadr,0,sizeof(srvadr));
srvadr.sin_family =AF_INET;
//srvadr.sin_addr.s_addr =inet_addr(srvipadrs);
srvadr.sin_addr.s_addr =inet_addr(255.255.255.255);
srvadr.sin_port =htons(srvtcpport);
if(bind(sfd,(struct sockaddr*)&srvadr , sizeof(srvadr)) < 0)
errexit("Can't bind local address\n");
printf("Socket is Opened Waiting for reply\n");
memset(&rxmesg,0,sizeof(rxmesg));
fromlen=sizeof(from);
if(recvfrom(sfd,rxmesg,7,0,(struct sockaddr*)&from,&fromlen)<0)
errexit("recv error \n");
//printf("Received Message is %s\n",rxmesg);
printf(" Received Message from %s:%d\n",
inet_ntoa(from.sin_addr),ntohs(from.sin_port));
if (setsockopt(sfd,SOL_SOCKET,SO_BROADCAST,&one,sizeo f(one))==-1)
{
//perror("bootpc: setsockopt failed");
//FatalError();
}
from.sin_addr.s_addr =inet_addr(255.255.255.255);
|