Guest User

Untitled

a guest
Nov 19th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. // UDPListener.cpp : Defines the entry point for the console application.
  2.  
  3. #include "stdafx.h"
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <windows.h> // Needed for all Winsock stuff
  7.  
  8. #pragma comment(lib,"ws2_32.lib") //Winsock Library
  9.  
  10. #define PORT_NUM 5001 // Port number used
  11. #define IP_ADDR "127.0.0.1" // IP address of server1 (*** HARDWIRED ***)
  12. #define NET_BUFF_SIZE 400
  13.  
  14. void NET_recv(int client, sockaddr_in server_addr, char *buffer)
  15. {
  16. char data_out[NET_BUFF_SIZE];
  17. int addr_len = sizeof(server_addr);
  18.  
  19. int retcode = recvfrom(client, data_out, NET_BUFF_SIZE, 0, (struct sockaddr *)&server_addr, &addr_len);
  20. if (retcode < 0)
  21. {
  22. int err = WSAGetLastError();
  23. printf("recvfrom() failed with error code : %d\n", err);
  24. return;
  25. }
  26. data_out[ retcode ] = 0;
  27. memcpy(buffer, data_out, retcode + 1);
  28. }
  29.  
  30. int setup_socket(int *client_s, sockaddr_in *server_addr, int port_num)
  31. {
  32. WORD wVersionRequested = MAKEWORD(1, 1); // Stuff for WSA functions
  33. WSADATA wsaData; // Stuff for WSA functions
  34. int opt = 1;
  35.  
  36. WSAStartup(wVersionRequested, &wsaData);
  37.  
  38. server_addr->sin_family = AF_INET; // Address family to use
  39. server_addr->sin_port = htons(port_num); // Port num to use
  40. server_addr->sin_addr.S_un.S_addr = inet_addr(IP_ADDR);
  41.  
  42. *client_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  43. if (client_s < 0)
  44. {
  45. printf("*** ERROR - socket() failed \n");
  46. }
  47.  
  48. //UDP Broadcast permissions
  49. if (setsockopt(*client_s, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt)) == SOCKET_ERROR)
  50. {
  51. printf("\nERROR in broadcasting ERROR CODE : %d \n", WSAGetLastError());
  52. closesocket(*client_s);
  53. WSACleanup();
  54. return 1;
  55. }
  56.  
  57. //UDP SOCKET Binding
  58. if (bind(*client_s, (sockaddr *)server_addr, sizeof(sockaddr_in)) == SOCKET_ERROR)
  59. {
  60. int err = WSAGetLastError();
  61. printf("\nUDP socket binding failed ERROR CODE : %d\n", err);
  62. closesocket(*client_s);
  63. WSACleanup();
  64. return 1;
  65. }
  66. }
  67.  
  68. int _tmain(int argc, _TCHAR* argv[])
  69. {
  70. int client_s;
  71. sockaddr_in server_addr;
  72. char buffer[ NET_BUFF_SIZE ];
  73.  
  74. printf("Setting up...\n");
  75. setup_socket(&client_s, &server_addr, PORT_NUM);
  76.  
  77. while (true) {
  78. NET_recv(client_s, server_addr, buffer);
  79. printf("%s\n", buffer);
  80. }
  81. return 0;
  82. }
Add Comment
Please, Sign In to add comment