#include #include #include #include int main(int argc, char * argv[]) { SOCKET sock; srand(GetTickCount()); printf("UDP test program\nListens on port 8888, transmits data as a response to received data.\n"); { WSADATA d; int i; i=WSAStartup(0x0002,&d); if(i==0) { printf("Winsock 2.0 initialized correctly...\n"); } else { printf("Winsock failed to init.\n"); return 0; } } sock=socket(AF_INET,SOCK_DGRAM,0); sockaddr_in sain; sain.sin_family=AF_INET; sain.sin_addr.S_un.S_addr=ADDR_ANY; sain.sin_port=htons(8888); if(bind(sock,(sockaddr *)&sain,sizeof(sain))) { printf("bind() error!\n"); closesocket(sock); return 0; } char incomingbuf[1024]; char outgoingbuf[1024]; int datalen; int sain_len; sockaddr_in sender; DWORD err; while(1) { sain_len=sizeof(sender); datalen=recvfrom(sock,incomingbuf,1023,0,(sockaddr *)&sender,&sain_len); if(datalen>0) { incomingbuf[datalen]=0; printf("UDP Datagram from %i.%i.%i.%i:%i\n",sender.sin_addr.S_un.S_un_b.s_b1,sender.sin_addr.S_un.S_un_b.s_b2,sender.sin_addr.S_un.S_un_b.s_b3,sender.sin_addr.S_un.S_un_b.s_b4,ntohs(sender.sin_port)); printf("Received '%s' [%i]\n",incomingbuf,datalen); wsprintf(outgoingbuf,"%s|rnd=%i",incomingbuf,rand()&0xFF); printf("Sent back: '%s' [%i]\n",outgoingbuf,strlen(outgoingbuf)); sendto(sock,outgoingbuf,strlen(outgoingbuf)+1,0,(sockaddr *)&sender,sizeof(sender)); } else { err=WSAGetLastError(); Sleep(1); } } closesocket(sock); return 0; }