Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.54 KB | None | 0 0
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <WinSock2.h>
  4. #include <string.h>
  5. #include <exception>
  6. #include <string>
  7. #include <vector>
  8.  
  9. #pragma comment (lib, "ws2_32.lib")
  10.  
  11. using namespace std;
  12.  
  13. struct Ramka
  14. {
  15.     char kod;
  16.     char buffor[256];
  17.     /*char pytanie[100];
  18.     char znakKonca;
  19.  
  20.     char odp1[20];          //char 1bajt, shor 2bajty, long 8bajtow, int 4bajty *8bity float tyle co long
  21.     char znakKonca1;
  22.     char odp2[20];
  23.     char znakKonca2;
  24.     char odp3[20];
  25.     char znakKonca3;
  26.     char odp4[20];
  27.     char znakKonc4;
  28.     char odp5[20];
  29.     char znakKonca5;
  30.     char odp6[20];
  31.     char znakKonca6;*/
  32. };
  33.  
  34. class BladInicjalizacji : public exception
  35. {
  36.     public:
  37.         const char * what() const;
  38. };
  39.  
  40. const char * BladInicjalizacji::what() const
  41. {
  42.     return "Biblioteka nie zostala zainicjalizowana!";
  43. }
  44.  
  45. class WinSock
  46. {
  47.     public:
  48.         WinSock();
  49.         ~WinSock();
  50.  
  51.     private:
  52.         WSADATA wsadata;
  53. };
  54.  
  55. WinSock::WinSock()
  56. {
  57.     if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
  58.     {
  59.         throw BladInicjalizacji();
  60.     }
  61.     printf("Biblioteka zostala zainicjalizowana poprawnie.\n");
  62. }
  63.  
  64. WinSock::~WinSock()
  65. {
  66.     printf("Koniec pracy biblioteki.\n");
  67.     WSACleanup();
  68. }
  69.  
  70. class UDPSocket
  71. {
  72.     public:
  73.         UDPSocket();
  74.         ~UDPSocket();
  75.  
  76.          void Bind (const int) const;
  77.          void Wyslij(const string, const int, const char *) const;
  78.          void Odbierz(char * const) const;
  79.          
  80.     private:
  81.         SOCKET sock;
  82. };
  83.  
  84. UDPSocket::UDPSocket()
  85. {
  86.     sock = socket(AF_INET, SOCK_DGRAM, 0);
  87.  
  88.     if (sock == INVALID_SOCKET) throw exception("Blad tworzenia socketa");
  89. }
  90.  
  91. UDPSocket::~UDPSocket()
  92. {
  93.     closesocket(sock);
  94. }
  95.  
  96. void UDPSocket::Bind(const int port) const
  97. {
  98.     sockaddr_in sockaddr;
  99.  
  100.     sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  101.     sockaddr.sin_family = AF_INET;
  102.     sockaddr.sin_port = htons(port);
  103.  
  104.     if (bind(sock, (SOCKADDR*)&sockaddr, sizeof(sockaddr)) == SOCKET_ERROR)
  105.         throw exception ("Nie udalo sie zbindowac!");
  106. }
  107.  
  108. void UDPSocket::Wyslij(const string ip, const int port, const char * buffor) const
  109. {
  110.     sockaddr_in sockaddr;
  111.  
  112.     sockaddr.sin_addr.s_addr = inet_addr(ip.c_str());
  113.     sockaddr.sin_family = AF_INET;
  114.     sockaddr.sin_port = htons(port);
  115.  
  116.     if (sendto(sock, buffor, strlen(buffor), 0, (SOCKADDR*)&sockaddr, sizeof(sockaddr)) < 0)
  117.         throw exception("Nie udalo sie wyslac!");
  118. }
  119.  
  120. void UDPSocket::Odbierz(char * const buffor) const
  121. {
  122.     sockaddr_in sockaddr;
  123.     int size = sizeof(sockaddr);
  124.  
  125.     int odebrane = recvfrom(sock, buffor, 255, 0, (SOCKADDR*)&sockaddr, &size);
  126.  
  127.     if (odebrane >= 0)
  128.     {
  129.         buffor[odebrane] = 0;                           //buffor[odebrane] = '\0';
  130.     }
  131.     else throw exception("Nie udalo sie odebrac!");
  132. }
  133.  
  134. int main()
  135. {
  136.     try
  137.     {
  138.         WinSock winsock;
  139.        
  140.         UDPSocket udpsocket;
  141.         char buffor[256];
  142.  
  143.         udpsocket.Bind(7200);
  144.         do
  145.         {
  146.             printf("\nslucham: ");
  147.             scanf("%s", &buffor);
  148.            
  149.             if (string(buffor) == "exit") break; //esc khit
  150.  
  151.             udpsocket.Wyslij("192.168.0.13", 7300, buffor);
  152.  
  153.             //string odbierz = udpsocket.Odbierz();
  154.             char buff[256];
  155.             memset(buff, 0, 256);
  156.             udpsocket.Odbierz(buff);
  157.  
  158.             Ramka * ramka = (Ramka*)buff;
  159.             //wyswietl ramke
  160.  
  161.             const int rozmiar = 256;
  162.             char temp[rozmiar];
  163.  
  164.             int pozycja = 0;
  165.             for (int i = 0; i < rozmiar; i++)
  166.             {
  167.                 if (ramka->buffor[i] == 0x0A || i == rozmiar - 1)
  168.                 {
  169.                     strncpy(temp, ramka->buffor + pozycja, i - pozycja + 1);
  170.                     temp[i - pozycja + 1] = 0;
  171.                    
  172.                     printf("%s\n", temp);
  173.                     pozycja = i;
  174.                 }
  175.             }
  176.            
  177.             //printf("%s",
  178.  
  179.             //printf("odbieram: %s", odbierz.c_str());
  180.         }
  181.         while (true);
  182.     }
  183.     catch(exception e)
  184.     {
  185.         printf(e.what());
  186.     }
  187.  
  188.     _getch();
  189.     return 0;
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement