forked from JanekOstendorf/THOMAS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUDPClient.cpp
115 lines (85 loc) · 2.22 KB
/
UDPClient.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
-- UDPClient-KLASSE :: IMPLEMENTIERUNG --
*/
/* INCLUDES */
// Klassenheader
#include "UDPClient.h"
using namespace THOMAS;
// THOMAS-Exception Klasse
#include "THOMASException.h"
// IOStream-Klasse enhält u.a. Ein/Ausgabe Funktionen
#include <iostream>
// Socket-Klasse
#include <sys/socket.h>
// Enthält Strukturen für Sockets
#include <netinet/in.h>
// Enhält IP Strukturen
#include <arpa/inet.h>
// Netzwerk-Datenbank-Definitionen [Non-Standard]
// Hier wird u.a. die hostent-Struktur definiert, sowie die gethostbyname()-Funktion.
#include <netdb.h>
// String-Klasse
// Ehthält u.a. die memcpy Funktion
#include <string.h>
/* FUNKTIONEN */
UDPClient::UDPClient()
{
}
void UDPClient::Send(std::vector<unsigned char> buff)
{
// Buffer Array erstellen
BYTE data[buff.size()];
// Daten in C-Array kopieren
std::copy(buff.begin(), buff.end(), data);
// Daten an UDP-Server senden
sendto(_socket,data,buff.size(),0,(struct sockaddr *)&serverAddress,sizeof(serverAddress));
}
void UDPClient::CreateUDPClient(int port)
{
// Status ausgeben
std::cout << "\033[32m" << "[Status]" << " UDPClient erfolgreich erstellt! IP: " << _ip << " Port: " << port << "\033[0m" << std::endl;
// Neuen Socket erstellen
_socket = socket(AF_INET,SOCK_DGRAM,0);
// Serverdaten abrufen
hostent *serverData = gethostbyname(_ip);
// Informationen übergeben
// AdressenProtokoll definieren
serverAddress.sin_family = AF_INET;
// Port definieren
serverAddress.sin_port = htons(port);
// Die IP in die serverAddress Struktur kopieren
memcpy(reinterpret_cast<char *>(&serverAddress.sin_addr.s_addr), reinterpret_cast<char *>(serverData->h_addr_list[0]), serverData->h_length);
// Alles ok?
if(_socket == -1)
{
// Nicht gut!
throw THOMASException("Beim erstellen des Sockets ist ein Fehler aufgetreten");
}
// Running auf True setzten
_running = true;
}
// Getter & Setter
void UDPClient::SetFrameSize(int value)
{
_frameSize = value;
}
void UDPClient::SetFrameQuality(int value)
{
_frameQuality = value;
}
void UDPClient::SetIP(const char* ip)
{
_ip = ip;
}
int UDPClient::GetFrameSize()
{
return _frameSize;
}
int UDPClient::GetFrameQuality()
{
return _frameQuality;
}
bool UDPClient::GetServerRunning()
{
return _running;
};