#include #include #include #include #include int main(int argc, char * argv[]) { int sock; printf("UDP test program\nListens on port 8888, transmits data as a response to received data.\n"); sock=socket(AF_INET,SOCK_DGRAM,0); struct sockaddr_in sain; sain.sin_family=AF_INET; sain.sin_addr.s_addr=0; sain.sin_port=htons(8888); if(bind(sock,(struct sockaddr *)&sain,sizeof(sain))) { printf("bind() error!\n"); close(sock); return 0; } char incomingbuf[1024]; char outgoingbuf[1024]; int datalen; int sain_len; struct sockaddr_in sender; while(1) { sain_len=sizeof(sender); datalen=recvfrom(sock,incomingbuf,1023,0,(struct sockaddr *)&sender,&sain_len); if(datalen>0) { incomingbuf[datalen]=0; printf("UDP Datagram from %i.%i.%i.%i:%i\n",(sender.sin_addr.s_addr)&255,(sender.sin_addr.s_addr>>8)&255,(sender.sin_addr.s_addr>>16)&255,(sender.sin_addr.s_addr>>24)&255,ntohs(sender.sin_port)); printf("Received '%s' [%i]\n",incomingbuf,datalen); sprintf(outgoingbuf,"%s|rnd=%i",incomingbuf,rand()&0xFF); printf("Sent back: '%s' [%i]\n",outgoingbuf,strlen(outgoingbuf)); sendto(sock,outgoingbuf,strlen(outgoingbuf)+1,0,(struct sockaddr *)&sender,sizeof(sender)); } } close(sock); return 0; }