From 072c0e141cd5e6e6a55e0e63db21e1b1c6b3472f Mon Sep 17 00:00:00 2001 From: marcelb Date: Sun, 21 May 2023 08:54:11 +0200 Subject: [PATCH] Tested --- .vscode/settings.json | 5 ++ lib/ip.hpp | 20 +++++++ lib/tcp_socket.hpp | 56 ++++++++++++++++++ src/ip.cpp | 35 +++++++++++ src/tcp_socket.cpp | 128 +++++++++++++++++++++++++++++++++++++++++ test/client.cpp | 15 +++++ test/client.o | Bin 0 -> 30544 bytes test/compile-client.sh | 1 + test/compile-server.sh | 1 + test/server.cpp | 27 +++++++++ test/server.o | Bin 0 -> 30592 bytes 11 files changed, 288 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 lib/ip.hpp create mode 100644 lib/tcp_socket.hpp create mode 100644 src/ip.cpp create mode 100644 src/tcp_socket.cpp create mode 100644 test/client.cpp create mode 100755 test/client.o create mode 100644 test/compile-client.sh create mode 100644 test/compile-server.sh create mode 100644 test/server.cpp create mode 100755 test/server.o diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..1507357 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "functional": "cpp" + } +} \ No newline at end of file diff --git a/lib/ip.hpp b/lib/ip.hpp new file mode 100644 index 0000000..81b07de --- /dev/null +++ b/lib/ip.hpp @@ -0,0 +1,20 @@ +#ifndef _IP_ +#define _IP_ + +#include +#include +#include +#include +#include +#include + +using namespace std; + +bool isIPAddress(const string address); +bool isIPv4 (const string address); +bool isIPv6 (const string address); +string ipFromDomain(const string domain); + + + +#endif \ No newline at end of file diff --git a/lib/tcp_socket.hpp b/lib/tcp_socket.hpp new file mode 100644 index 0000000..b702bf6 --- /dev/null +++ b/lib/tcp_socket.hpp @@ -0,0 +1,56 @@ +#ifndef TCP_SCK +#define TCP_SCK + +#include +#include +#include +#include +#include +#include + +#include "ip.hpp" + +using namespace std; + +class server { + public: + int sock; + struct sockaddr_in addr; + + server (const ushort port, const uint limit = 1000); + ~server (); + + +}; + + +class client { + public: + int sock; + struct sockaddr_in addr; + + client (const string address, const ushort port); + ~client (); + bool tell (const string msg); + string obey (size_t byte_limit = 1024); +}; + + +class comming { + public: + const server *srv; + int conn; + string ipv4; + string ipv6; + + comming(const server *_srv, const uint timeout); + ~comming(); + bool tell (const string msg); + string obey (size_t byte_limit = 1024); + +}; + + + + +#endif \ No newline at end of file diff --git a/src/ip.cpp b/src/ip.cpp new file mode 100644 index 0000000..658ba77 --- /dev/null +++ b/src/ip.cpp @@ -0,0 +1,35 @@ +#include "../lib/ip.hpp" + + +bool isIPAddress(const string address) { + char buf[16]; + return isIPv4(address) || isIPv6(address) ; +} + +bool isIPv4 (const string address) { + char buf[16]; + return inet_pton(AF_INET, address.c_str(), buf); +} + +bool isIPv6 (const string address) { + char buf[16]; + return inet_pton(AF_INET6, address.c_str(), buf); +} + +string ipFromDomain(const string domain) { + struct hostent *host_name; + struct in_addr **ipaddress; + int i; + char ip_address[INET6_ADDRSTRLEN]; + + if((host_name = gethostbyname(domain.c_str())) == NULL) { + printf ("[ERROR] IP Address Not Found from domain!"); + } + + ipaddress = (struct in_addr **) host_name->h_addr_list; + for(i = 0; ipaddress[i] != NULL; i++) { + strcpy(ip_address, inet_ntoa(*ipaddress[i])); + } + + return (string) ip_address; +} \ No newline at end of file diff --git a/src/tcp_socket.cpp b/src/tcp_socket.cpp new file mode 100644 index 0000000..ab2898f --- /dev/null +++ b/src/tcp_socket.cpp @@ -0,0 +1,128 @@ +#include "../lib/tcp_socket.hpp" + +server::server (const ushort port, const uint limit) { + + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = INADDR_ANY; + addr.sin_port = htons(port); + + sock = socket(AF_INET, SOCK_STREAM, 0); + if (sock <= 0) { + printf("[ERROR] Ne mogu otvoriti defenirani TCP/IP socket!"); + } + + int opt=1; + if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) { + printf("[ERROR] Ne mogu otvoriti defenirani TCP/IP socket!"); + } + printf("[EVENT] Otvoren defenirani TCP/IP socket."); + + if (bind(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) < 0) { + printf("[ERROR] Ne mogu bindati defenirani TCP/IP socket!"); + } + + if (listen(sock, limit) < 0) { + printf("[ERROR] Ne mogu defenirani listen za TCP/IP socket!"); + } + +} + + +server::~server () { + + if (sock<0) { + printf ("[ERROR] Soket destruktor: već zatvoren soket!"); + } + + else if (!close(sock)) { + printf ("[ERROR] Soket destruktor nije mogao zatvoriti soket!"); + } + +} + + +client::client(const string address, const ushort port) { + + sock = socket(AF_INET, SOCK_STREAM, 0); + if (sock < 0) { + printf("[ERROR] Ne mogu otvoriti TCP/IP socket!"); + } + + const string _address = isIPAddress(address) ? address : ipFromDomain(address); + + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = inet_addr(_address.c_str()); + addr.sin_port = htons(port); + + if (connect(sock, (struct sockaddr*)&addr, sizeof(struct sockaddr_in)) != 0) { + printf("[EROR] Ne mogu se povezati s poslužiteljem!"); + } + +} + + +client::~client () { + + if (sock <= 0) { + printf ("[ERROR] Soket destruktor: već zatvoren soket!"); + } + + else if (close(sock) != 0) { + printf ("[ERROR] Soket destruktor nije mogao zatvoriti soket!"); + } + +} + + +bool client::tell (const string msg) { + ssize_t sended = send(sock, msg.c_str(), msg.length(),0); + return sended == msg.length(); +} + +string client::obey (size_t byte_limit) { + char res[byte_limit] = {0}; + ssize_t n = read ( sock , res, byte_limit); + return (string) res; +} + + + +comming::comming(const server *_srv, const uint timeout) { + srv = _srv; + socklen_t len = sizeof(struct sockaddr_in); + + if ((conn = accept(srv->sock, (struct sockaddr *)&(srv->addr), (socklen_t*)&len)) < 0) { + printf("[ERROR] Ne mogu preuzeti vezu klijenta!"); + } + + char ipv4_buff[INET_ADDRSTRLEN]; + char ipv6_buff[INET6_ADDRSTRLEN]; + + inet_ntop(AF_INET, &(srv->addr.sin_addr), ipv4_buff, INET_ADDRSTRLEN); + ipv4 = ipv4_buff; + inet_ntop(AF_INET6, &(srv->addr.sin_addr), ipv6_buff, INET6_ADDRSTRLEN); + ipv6 = ipv6_buff; + + +} + +comming::~comming() { + if (conn <= 0) { + printf ("[ERROR] Comming destruktor: već zatvoren soket!"); + } + + else if (close(conn) != 0) { + printf ("[ERROR] Comming destruktor nije mogao zatvoriti soket!"); + } +} + +bool comming::tell (const string msg) { + ssize_t sended = send(conn, msg.c_str(), msg.length(),0); + return sended == msg.length(); +} + +string comming::obey (size_t byte_limit) { + char res[byte_limit] = {0}; + ssize_t n = read ( conn , res, byte_limit); + return (string) res; +} \ No newline at end of file diff --git a/test/client.cpp b/test/client.cpp new file mode 100644 index 0000000..083c994 --- /dev/null +++ b/test/client.cpp @@ -0,0 +1,15 @@ +#include + +#include "../lib/tcp_socket.hpp" + +using namespace std; + +int main() { + + client myserver("localhost", 5000); + string sends = "Hello wld!"; + cout << myserver.tell(sends) << " " << sends.length() << endl; + cout << myserver.obey(); + + return 0; +} \ No newline at end of file diff --git a/test/client.o b/test/client.o new file mode 100755 index 0000000000000000000000000000000000000000..9254249c6572c3d042fabc5c8e29b8f2eb8b17ff GIT binary patch literal 30544 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
a98X=iB}nNk0T|5-l;|EOr3a*b^a?Pg$pSF_ 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 literal 0 HcmV?d00001 diff --git a/test/compile-client.sh b/test/compile-client.sh new file mode 100644 index 0000000..c0b31c0 --- /dev/null +++ b/test/compile-client.sh @@ -0,0 +1 @@ +g++ client.cpp ../src/* -o client.o \ No newline at end of file diff --git a/test/compile-server.sh b/test/compile-server.sh new file mode 100644 index 0000000..e6bb7c9 --- /dev/null +++ b/test/compile-server.sh @@ -0,0 +1 @@ +g++ server.cpp ../src/* -o server.o \ No newline at end of file diff --git a/test/server.cpp b/test/server.cpp new file mode 100644 index 0000000..c0139ca --- /dev/null +++ b/test/server.cpp @@ -0,0 +1,27 @@ +#include + +#include "../lib/tcp_socket.hpp" + +using namespace std; + +int main() { + + server myserver(5000, 10); + comming myclient(&myserver, 1000); + + string fromclient = myclient.obey(); + myclient.tell(fromclient); + myclient.~comming(); + + while (true) { + comming myclient(&myserver, 1000); + string fromclient = myclient.obey(); + cout << fromclient << " " << myclient.conn << endl; + cout << "Poslano: " << myclient.tell(fromclient) << "Veličin: " << fromclient.length() << endl; + // myclient.~comming(); + cout << "IPv4 " << myclient.ipv4 << " ipv6 " << myclient.ipv6; + } + + + return 0; +} \ No newline at end of file diff --git a/test/server.o b/test/server.o new file mode 100755 index 0000000000000000000000000000000000000000..2a5703ac3daab7bf3ec35adc74ffdd238d091d6f GIT binary patch literal 30592 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 R-xWsm`l#UMI0`se_Fp{t8t4E3 literal 0 HcmV?d00001