#if defined WIN32
#include <winsock.h>
#else
#define closesocket close
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#endif
#include <stdio.h>
#include <string.h> /* for memset */
#define ADDR "127.0.0.1"
#define BUFFLEN 255
#define PORT 18000
void die_with_error(char * msg)
{
};
int main()
{
#ifdef WIN
// Initialize Winsock
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0){
printf("Error at WSAStartup()\n");
return 0;
}
#endif
int recv_socket;
struct sockaddr_in recv_addr;
struct sockaddr_in sender_addr;
unsigned int sender_addr_size;
char recv_buff[BUFFLEN];
memset(&recv_buff, 0, BUFFLEN);
// Create a receiver socket to receive datagrams
if ((recv_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP))< 0)
die_with_error("socket() failed");
// Bind the socket to the address and port specified.
memset(&recv_addr, 0, sizeof(recv_addr));
recv_addr.sin_family = PF_INET;
recv_addr.sin_port = htons(PORT);
recv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if( (bind(recv_socket, (struct sockaddr *) &recv_addr, sizeof(recv_addr))) <0)
die_with_error("bind() failed");
// Call the recvfrom function to receive datagrams
// on the bound socket.
printf("Receiving datagrams...\n");
sender_addr_size = sizeof(sender_addr);
recvfrom(recv_socket, recv_buff, sizeof(recv_buff), 0,(const struct sockaddr_in*)&sender_addr, &sender_addr_size);
// Close the socket when finished receiving datagrams
printf("Received %s.\nFinished receiving. Closing socket.\n", recv_buff);
closesocket(recv_socket);
#ifdef WIN
WSACleanup();
#endif
system("pause");
return 0;
}