Spa_m

PWSS_Broadcast_ChPa

Apr 4th, 2017
346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdlib.h>
  2. #include <winsock2.h>
  3. #include <iostream>
  4. #include <string>
  5. #include <conio.h>
  6. #include <process.h>
  7. using namespace std;
  8. #pragma comment(lib, "ws2_32.lib")
  9.  
  10. struct Message
  11. {
  12.     char hostName[64];
  13.     char text[128];
  14. };
  15.  
  16.  
  17. void __cdecl recvdProc(void * Args);
  18. void sendProc(sockaddr_in);
  19.  
  20. SOCKET mainSocket;
  21. bool programExit = true;
  22.  
  23. Message message;
  24. sockaddr_in Recv_addr;
  25.  
  26.  
  27. int main(int argc, char *argv[])
  28. {
  29.     WSADATA wsaDATA;
  30.  
  31.     if (WSAStartup(MAKEWORD(1, 1), &wsaDATA) == NO_ERROR)
  32.     {
  33.         if ((mainSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) cout << "#2 Creating socket error: " << WSAGetLastError() << endl;
  34.         else
  35.         {
  36.             bool enableSocketBrodcast = true;
  37.             setsockopt(mainSocket, SOL_SOCKET, SO_BROADCAST, (char*)&enableSocketBrodcast, sizeof(bool));
  38.  
  39.             sockaddr_in Sender_addr;
  40.             Sender_addr.sin_family = AF_INET;
  41.             Sender_addr.sin_port = htons(12345);
  42.             Sender_addr.sin_addr.s_addr = inet_addr("255.255.255.255");
  43.  
  44.             sockaddr_in Recv_addr;
  45.             Recv_addr.sin_family = AF_INET;
  46.             Recv_addr.sin_port = htons(12345);
  47.             Recv_addr.sin_addr.s_addr = INADDR_ANY;
  48.  
  49.             gethostname(message.hostName, sizeof(message.hostName));
  50.  
  51.             if (bind(mainSocket, reinterpret_cast<sockaddr*>(&Recv_addr), sizeof(Recv_addr)) == 0)
  52.             {
  53.                 _beginthread(recvdProc, 0, NULL);
  54.  
  55.                 do
  56.                 {
  57.                     sendProc(Sender_addr);
  58.                 } while (programExit);
  59.             }
  60.             else cout << "#3 bind returned error: " << WSAGetLastError() << endl;
  61.         }
  62.         closesocket(mainSocket);
  63.     }
  64.     else cout << "#1 WSAStartup returned  error: " << WSAGetLastError() << endl;
  65.  
  66.     WSACleanup();
  67.     _getch();
  68.     return 0;
  69. }
  70.  
  71. void __cdecl recvdProc(void * Args)
  72. {
  73.     int rozmiar = sizeof(Recv_addr);
  74.     int rozm = -1;
  75.     Message _message;
  76.  
  77.     do
  78.     {
  79.         rozm = recvfrom(mainSocket, (char*)(&_message), sizeof(Message), 0, (sockaddr*) (&Recv_addr), &rozmiar);
  80.         if (rozm < 0)
  81.             printf("4 Error: %d\n", WSAGetLastError());
  82.         else
  83.         {
  84.             if (strcmp(_message.hostName, message.hostName) != 0)
  85.                 printf("%s: %s\n", _message.hostName, _message.text);
  86.         }
  87.     } while (programExit);
  88.  
  89.     _endthread();
  90. }
  91.  
  92.  
  93. void sendProc(sockaddr_in Sender_addr)
  94. {
  95.     strcpy(message.text, " connected");
  96.     if (sendto(mainSocket, (char*) (&message), sizeof(Message), 0, (sockaddr*)(&Sender_addr), sizeof(Sender_addr)) < 0)
  97.         printf("send error: %d", WSAGetLastError());
  98.  
  99.     do
  100.     {
  101.         char wiadomosc[192] = "";
  102.         std::cin >> message.text;
  103.  
  104.         if (strcmp(message.text, "exit") == 0)
  105.             break;
  106.  
  107.         if (sendto(mainSocket, reinterpret_cast<char*>(&message), sizeof(Message), 0, reinterpret_cast<sockaddr*>(&Sender_addr), sizeof(Sender_addr)) < 0)
  108.             printf("send error: %d", WSAGetLastError());
  109.  
  110.     } while (true);
  111.  
  112.     strcpy(message.text, " connected");
  113.     if (sendto(mainSocket, reinterpret_cast<char*>(&message), sizeof(Message), 0, reinterpret_cast<sockaddr*>(&Sender_addr), sizeof(Sender_addr)) < 0)
  114.         printf("send error: %d", WSAGetLastError());
  115.  
  116.     programExit = false;
  117. }
Add Comment
Please, Sign In to add comment