#include "main.h" //====================================================================== // MAIN //====================================================================== int main(int argc, char **argv) { int portNumber; struct sockaddr_in myAddr; char msg[0x100]; struct sockaddr_in fromAddr; int ok; //---- check command line arguments ---- if(argc!=2) { fprintf(stderr,"usage: %s port\n",argv[0]); exit(1); } //---- extract local port number ---- if(sscanf(argv[1],"%d",&portNumber)!=1) { fprintf(stderr,"invalid port %s\n",argv[1]); exit(1); } //---- create UDP socket ---- int udpSocket=socket(PF_INET,SOCK_DGRAM,0); if(udpSocket==-1) { perror("socket"); exit(1); } // ... bound to any local address on the specified port myAddr.sin_family=AF_INET; myAddr.sin_port=htons(portNumber); myAddr.sin_addr.s_addr=htonl(INADDR_ANY); ok = bind(udpSocket,(struct sockaddr *)&myAddr,sizeof(myAddr)); if (ok== -1){ perror("bind"); exit(1); } // ... allowing broadcast (optional) int on=1; ok = setsockopt(udpSocket,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int)); if (ok== -1){ perror("setsockopt"); exit(1); } for(;;) { //---- receive message ---- socklen_t len=sizeof(fromAddr); int r=recvfrom(udpSocket,msg,0x100,0,(struct sockaddr *)&fromAddr,&len); if(r==-1) { perror("recvfrom"); exit(1); } //---- display message and source address/port ---- msg[r]='\0'; printf("from %s:%d : %s\n", inet_ntoa(fromAddr.sin_addr),ntohs(fromAddr.sin_port),msg); } close(udpSocket); return 0; } //^^^^^^^^^^^^^^^^^^^^^^^^^^ EOF ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^