Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <conio.h>
- #include <stdio.h>
- #include <WinSock2.h>
- #include <string.h>
- #include <exception>
- #include <string>
- #include <vector>
- #pragma comment (lib, "ws2_32.lib")
- using namespace std;
- struct Ramka
- {
- char kod;
- char buffor[256];
- /*char pytanie[100];
- char znakKonca;
- char odp1[20]; //char 1bajt, shor 2bajty, long 8bajtow, int 4bajty *8bity float tyle co long
- char znakKonca1;
- char odp2[20];
- char znakKonca2;
- char odp3[20];
- char znakKonca3;
- char odp4[20];
- char znakKonc4;
- char odp5[20];
- char znakKonca5;
- char odp6[20];
- char znakKonca6;*/
- };
- class BladInicjalizacji : public exception
- {
- public:
- const char * what() const;
- };
- const char * BladInicjalizacji::what() const
- {
- return "Biblioteka nie zostala zainicjalizowana!";
- }
- class WinSock
- {
- public:
- WinSock();
- ~WinSock();
- private:
- WSADATA wsadata;
- };
- WinSock::WinSock()
- {
- if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
- {
- throw BladInicjalizacji();
- }
- printf("Biblioteka zostala zainicjalizowana poprawnie.\n");
- }
- WinSock::~WinSock()
- {
- printf("Koniec pracy biblioteki.\n");
- WSACleanup();
- }
- class UDPSocket
- {
- public:
- UDPSocket();
- ~UDPSocket();
- void Bind (const int) const;
- void Wyslij(const string, const int, const char *) const;
- void Odbierz(char * const) const;
- private:
- SOCKET sock;
- };
- UDPSocket::UDPSocket()
- {
- sock = socket(AF_INET, SOCK_DGRAM, 0);
- if (sock == INVALID_SOCKET) throw exception("Blad tworzenia socketa");
- }
- UDPSocket::~UDPSocket()
- {
- closesocket(sock);
- }
- void UDPSocket::Bind(const int port) const
- {
- sockaddr_in sockaddr;
- sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
- sockaddr.sin_family = AF_INET;
- sockaddr.sin_port = htons(port);
- if (bind(sock, (SOCKADDR*)&sockaddr, sizeof(sockaddr)) == SOCKET_ERROR)
- throw exception ("Nie udalo sie zbindowac!");
- }
- void UDPSocket::Wyslij(const string ip, const int port, const char * buffor) const
- {
- sockaddr_in sockaddr;
- sockaddr.sin_addr.s_addr = inet_addr(ip.c_str());
- sockaddr.sin_family = AF_INET;
- sockaddr.sin_port = htons(port);
- if (sendto(sock, buffor, strlen(buffor), 0, (SOCKADDR*)&sockaddr, sizeof(sockaddr)) < 0)
- throw exception("Nie udalo sie wyslac!");
- }
- void UDPSocket::Odbierz(char * const buffor) const
- {
- sockaddr_in sockaddr;
- int size = sizeof(sockaddr);
- int odebrane = recvfrom(sock, buffor, 255, 0, (SOCKADDR*)&sockaddr, &size);
- if (odebrane >= 0)
- {
- buffor[odebrane] = 0; //buffor[odebrane] = '\0';
- }
- else throw exception("Nie udalo sie odebrac!");
- }
- int main()
- {
- try
- {
- WinSock winsock;
- UDPSocket udpsocket;
- char buffor[256];
- udpsocket.Bind(7200);
- do
- {
- printf("\nslucham: ");
- scanf("%s", &buffor);
- if (string(buffor) == "exit") break; //esc khit
- udpsocket.Wyslij("192.168.0.13", 7300, buffor);
- //string odbierz = udpsocket.Odbierz();
- char buff[256];
- memset(buff, 0, 256);
- udpsocket.Odbierz(buff);
- Ramka * ramka = (Ramka*)buff;
- //wyswietl ramke
- const int rozmiar = 256;
- char temp[rozmiar];
- int pozycja = 0;
- for (int i = 0; i < rozmiar; i++)
- {
- if (ramka->buffor[i] == 0x0A || i == rozmiar - 1)
- {
- strncpy(temp, ramka->buffor + pozycja, i - pozycja + 1);
- temp[i - pozycja + 1] = 0;
- printf("%s\n", temp);
- pozycja = i;
- }
- }
- //printf("%s",
- //printf("odbieram: %s", odbierz.c_str());
- }
- while (true);
- }
- catch(exception e)
- {
- printf(e.what());
- }
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement