Compare commits
	
		
			4 Commits
		
	
	
		
			dev
			...
			v0.4_win+c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					915975fba8 | ||
| 
						 | 
					1f82e94296 | ||
| 
						 | 
					b6468bd148 | ||
| 
						 | 
					9e14e361e3 | 
@ -3,17 +3,30 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <iostream>
 | 
					#include <iostream>
 | 
				
			||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
 | 
					#include <vector>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include <openssl/ssl.h>
 | 
				
			||||||
 | 
					#include <openssl/err.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if __linux__
 | 
				
			||||||
    #include <arpa/inet.h>
 | 
					    #include <arpa/inet.h>
 | 
				
			||||||
    #include <netdb.h>
 | 
					    #include <netdb.h>
 | 
				
			||||||
    #include <unistd.h>
 | 
					    #include <unistd.h>
 | 
				
			||||||
#include <openssl/ssl.h>
 | 
					#elif _WIN32
 | 
				
			||||||
#include <openssl/err.h>
 | 
					    // #include <sstream>
 | 
				
			||||||
 | 
					    #include <WinSock.h>
 | 
				
			||||||
 | 
					    #include <ws2tcpip.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "ip.hpp"
 | 
					#include "ip.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class client;
 | 
				
			||||||
 | 
					// class secure;
 | 
				
			||||||
 | 
					// class server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Server klasa za TCP/IP soket
 | 
					 * Server klasa za TCP/IP soket
 | 
				
			||||||
 * Instanca se incijalizira kada pokrećemo server
 | 
					 * Instanca se incijalizira kada pokrećemo server
 | 
				
			||||||
@ -23,10 +36,15 @@ class server {
 | 
				
			|||||||
    public:
 | 
					    public:
 | 
				
			||||||
    int sock;
 | 
					    int sock;
 | 
				
			||||||
    struct sockaddr_in addr;
 | 
					    struct sockaddr_in addr;
 | 
				
			||||||
 | 
					    SSL_CTX* securefds = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    server (const ushort port, const uint limit = 1000);
 | 
					    server (const ushort port, const uint limit = 1000, SSL_CTX* _securefds = NULL);
 | 
				
			||||||
    ~server ();
 | 
					    ~server ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // one klijent
 | 
				
			||||||
 | 
					    client* cli;
 | 
				
			||||||
 | 
					    void accept(const uint timeout = 100);   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@ -51,40 +69,23 @@ class secure {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class client {
 | 
					class client {
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
    int sock;
 | 
					    // zajedničke
 | 
				
			||||||
 | 
					    int conn; // mijenja sock
 | 
				
			||||||
    struct sockaddr_in addr;
 | 
					    struct sockaddr_in addr;
 | 
				
			||||||
    SSL* ssl = NULL;
 | 
					    SSL* ssl = NULL;
 | 
				
			||||||
 | 
					    // server s klijentima
 | 
				
			||||||
    client (const string address, const ushort port, const uint timeout = 100, SSL_CTX* securefds = NULL);
 | 
					 | 
				
			||||||
    ~client ();
 | 
					 | 
				
			||||||
    bool tell (const string msg);
 | 
					 | 
				
			||||||
    string obey (size_t byte_limit = 1024);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Klasa za inicijalizaciju dolaznih veza
 | 
					 | 
				
			||||||
 * Definira se na serverskom tipu aplikacija i predstavlja identifikator klijenta
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class comming {
 | 
					 | 
				
			||||||
    public:
 | 
					 | 
				
			||||||
    const server* srv;
 | 
					    const server* srv;
 | 
				
			||||||
    struct sockaddr_in addr;
 | 
					    // klijent sa serverom
 | 
				
			||||||
    int conn;
 | 
					 | 
				
			||||||
    string ipv4;
 | 
					    string ipv4;
 | 
				
			||||||
    string ipv6;
 | 
					    string ipv6;
 | 
				
			||||||
    SSL* ssl = NULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    comming(const server *_srv, const uint timeout = 100, SSL_CTX* securefds = NULL);
 | 
					 | 
				
			||||||
    ~comming();
 | 
					 | 
				
			||||||
    bool tell (const string msg);
 | 
					 | 
				
			||||||
    string obey (size_t byte_limit = 1024);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    // konstruktor za klijente bez servera
 | 
				
			||||||
 | 
					    client (const string address, const ushort port, const uint timeout = 100, SSL_CTX* securefds = NULL);
 | 
				
			||||||
 | 
					    // konstruktor za klijente sa serverom
 | 
				
			||||||
 | 
					    client (const server *_srv, const uint timeout = 100, SSL_CTX* securefds = NULL);
 | 
				
			||||||
 | 
					    ~client ();
 | 
				
			||||||
 | 
					    bool push (const string msg);
 | 
				
			||||||
 | 
					    string pull (size_t byte_limit = 1024);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@ -4,7 +4,8 @@
 | 
				
			|||||||
 * Kontrustruktor varijable tipa server, prima port i limit za ograničenje liste klijenata na čekanju
 | 
					 * Kontrustruktor varijable tipa server, prima port i limit za ograničenje liste klijenata na čekanju
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
server::server (const ushort port, const uint limit) {
 | 
					server::server (const ushort port, const uint limit, SSL_CTX* _securefds) {
 | 
				
			||||||
 | 
					    securefds = _securefds;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    addr.sin_family = AF_INET;
 | 
					    addr.sin_family = AF_INET;
 | 
				
			||||||
    addr.sin_addr.s_addr = INADDR_ANY;
 | 
					    addr.sin_addr.s_addr = INADDR_ANY;
 | 
				
			||||||
@ -31,6 +32,10 @@ server::server (const ushort port, const uint limit) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void server::accept(const uint timeout) {
 | 
				
			||||||
 | 
					    cli = new client(this, timeout, securefds);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Destruktor varijable tipa server
 | 
					 * Destruktor varijable tipa server
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
@ -38,6 +43,9 @@ server::server (const ushort port, const uint limit) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
server::~server () {
 | 
					server::~server () {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cli->~client();
 | 
				
			||||||
 | 
					    cli = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (sock<=0) {
 | 
					    if (sock<=0) {
 | 
				
			||||||
        throw string("[ERROR] The socket is already closed "); 
 | 
					        throw string("[ERROR] The socket is already closed "); 
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -110,8 +118,17 @@ secure::~secure () {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
client::client(const string address, const ushort port, const uint timeout, SSL_CTX* securefds) {
 | 
					client::client(const string address, const ushort port, const uint timeout, SSL_CTX* securefds) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sock = socket(AF_INET, SOCK_STREAM, 0);
 | 
					    #if _WIN32
 | 
				
			||||||
	if (sock < 0) {
 | 
					        WSADATA wsa;
 | 
				
			||||||
 | 
					        SOCKET s;
 | 
				
			||||||
 | 
					        if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) {
 | 
				
			||||||
 | 
					            //printf("Failed. Error Code : %d",WSAGetLastError());
 | 
				
			||||||
 | 
					            throw string("[ERROR] Unable to set WinSock " + to_string(WSAGetLastError()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    conn = socket(AF_INET, SOCK_STREAM, 0);
 | 
				
			||||||
 | 
						if (conn < 0) {
 | 
				
			||||||
        throw string("[ERROR] Unable to open TCP socket ");
 | 
					        throw string("[ERROR] Unable to open TCP socket ");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -121,7 +138,7 @@ client::client(const string address, const ushort port, const uint timeout, SSL_
 | 
				
			|||||||
	addr.sin_addr.s_addr = inet_addr(_address.c_str());
 | 
						addr.sin_addr.s_addr = inet_addr(_address.c_str());
 | 
				
			||||||
	addr.sin_port = htons(port);
 | 
						addr.sin_port = htons(port);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (connect(sock, (struct sockaddr*)&addr, sizeof(struct sockaddr_in)) != 0) {
 | 
					    if (connect(conn, (struct sockaddr*)&addr, sizeof(struct sockaddr_in)) != 0) {
 | 
				
			||||||
        throw string("Unable to connect to server ");
 | 
					        throw string("Unable to connect to server ");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -129,7 +146,7 @@ client::client(const string address, const ushort port, const uint timeout, SSL_
 | 
				
			|||||||
    tv.tv_sec = timeout/1000;
 | 
					    tv.tv_sec = timeout/1000;
 | 
				
			||||||
    tv.tv_usec = (timeout%1000)*1000;
 | 
					    tv.tv_usec = (timeout%1000)*1000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(struct timeval))) {
 | 
					    if (setsockopt(conn, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(struct timeval))) {
 | 
				
			||||||
        throw string("[ERROR] Unable to set timeout ");
 | 
					        throw string("[ERROR] Unable to set timeout ");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -138,7 +155,7 @@ client::client(const string address, const ushort port, const uint timeout, SSL_
 | 
				
			|||||||
        if (!ssl) {
 | 
					        if (!ssl) {
 | 
				
			||||||
            throw string("[ERROR] Creating SSL object ");
 | 
					            throw string("[ERROR] Creating SSL object ");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        SSL_set_fd(ssl, sock);
 | 
					        SSL_set_fd(ssl, conn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Perform the SSL handshake
 | 
					        // Perform the SSL handshake
 | 
				
			||||||
        if (SSL_connect(ssl) <= 0) {
 | 
					        if (SSL_connect(ssl) <= 0) {
 | 
				
			||||||
@ -150,65 +167,6 @@ client::client(const string address, const ushort port, const uint timeout, SSL_
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Destruktor varijable tipa client
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
client::~client () {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (ssl) {
 | 
					 | 
				
			||||||
        SSL_shutdown(ssl);
 | 
					 | 
				
			||||||
        SSL_free(ssl);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (sock <= 0) {
 | 
					 | 
				
			||||||
        throw string("[ERROR] The socket is already closed "); 
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    else if (close(sock) != 0) {
 | 
					 | 
				
			||||||
        throw string("[ERROR] Unable to close socket ");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Metoda klase client za slanje podataka preko soketa
 | 
					 | 
				
			||||||
 * Prima string koji će biti poslan
 | 
					 | 
				
			||||||
 * Vraća logički statu poređenja psolanih karaktera i karaktera u stringu
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool client::tell (const string msg) {
 | 
					 | 
				
			||||||
    size_t sended = 0;
 | 
					 | 
				
			||||||
    if (ssl) {
 | 
					 | 
				
			||||||
       sended = SSL_write(ssl, msg.c_str(), msg.length());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else {
 | 
					 | 
				
			||||||
        sended = write(sock, msg.c_str(), msg.length());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return sended == msg.length();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Metoda klase client za primanje poruke preko soketa
 | 
					 | 
				
			||||||
 * Prima dozvoljeni broj karaktera koji će primiti
 | 
					 | 
				
			||||||
 * Vraća string primljene poruke
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
string client::obey (size_t byte_limit) {
 | 
					 | 
				
			||||||
   char res[byte_limit] = {0};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (ssl) {
 | 
					 | 
				
			||||||
        SSL_read(ssl, res, byte_limit);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else {
 | 
					 | 
				
			||||||
        read(sock , res, byte_limit);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return string(res);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Konstruktor varijable tipa commint
 | 
					 * Konstruktor varijable tipa commint
 | 
				
			||||||
 * Prima pokazivač na inicijaliziranu varijablu tipa, port, 
 | 
					 * Prima pokazivač na inicijaliziranu varijablu tipa, port, 
 | 
				
			||||||
@ -217,7 +175,7 @@ string client::obey (size_t byte_limit) {
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
comming::comming(const server *_srv, const uint timeout, SSL_CTX* securefds) {
 | 
					client::client(const server *_srv, const uint timeout, SSL_CTX* securefds) {
 | 
				
			||||||
    srv = _srv;
 | 
					    srv = _srv;
 | 
				
			||||||
    socklen_t len = sizeof(struct sockaddr_in);
 | 
					    socklen_t len = sizeof(struct sockaddr_in);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -259,11 +217,16 @@ comming::comming(const server *_srv, const uint timeout, SSL_CTX* securefds) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Destruktor varijable tipa comming
 | 
					 * Destruktor varijable tipa client
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
comming::~comming() {
 | 
					client::~client () {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #if _WIN32
 | 
				
			||||||
 | 
					        WSACleanup();
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ssl) {
 | 
					    if (ssl) {
 | 
				
			||||||
        SSL_shutdown(ssl);
 | 
					        SSL_shutdown(ssl);
 | 
				
			||||||
@ -277,16 +240,18 @@ comming::~comming() {
 | 
				
			|||||||
    else if (close(conn) != 0) {
 | 
					    else if (close(conn) != 0) {
 | 
				
			||||||
        throw string("[ERROR] Unable to close socket ");
 | 
					        throw string("[ERROR] Unable to close socket ");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Metoda klase comming za slanje podataka preko soketa
 | 
					 * Metoda klase client za slanje podataka preko soketa
 | 
				
			||||||
 * Prima string koji će biti poslan
 | 
					 * Prima string koji će biti poslan
 | 
				
			||||||
 * Vraća logički statu poređenja psolanih karaktera i karaktera u stringu
 | 
					 * Vraća logički statu poređenja psolanih karaktera i karaktera u stringu
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool comming::tell (const string msg) {
 | 
					
 | 
				
			||||||
    ssize_t sended = 0;
 | 
					bool client::push (const string msg) {
 | 
				
			||||||
 | 
					    size_t sended = 0;
 | 
				
			||||||
    if (ssl) {
 | 
					    if (ssl) {
 | 
				
			||||||
       sended = SSL_write(ssl, msg.c_str(), msg.length());
 | 
					       sended = SSL_write(ssl, msg.c_str(), msg.length());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -296,14 +261,13 @@ bool comming::tell (const string msg) {
 | 
				
			|||||||
    return sended == msg.length();
 | 
					    return sended == msg.length();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Metoda klase comming za primanje poruke preko soketa
 | 
					 * Metoda klase client za primanje poruke preko soketa
 | 
				
			||||||
 * Prima dozvoljeni broj karaktera koji će primiti
 | 
					 * Prima dozvoljeni broj karaktera koji će primiti
 | 
				
			||||||
 * Vraća string primljene poruke
 | 
					 * Vraća string primljene poruke
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
string comming::obey (size_t byte_limit) {
 | 
					string client::pull (size_t byte_limit) {
 | 
				
			||||||
   char res[byte_limit] = {0};
 | 
					   char res[byte_limit] = {0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ssl) {
 | 
					    if (ssl) {
 | 
				
			||||||
@ -315,3 +279,6 @@ string comming::obey (size_t byte_limit) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return string(res);
 | 
					    return string(res);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -17,10 +17,10 @@ int main() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        string sends = "Hello world!";
 | 
					        string sends = "Hello world!";
 | 
				
			||||||
        cout << myserver.tell(sends) << " " << sends.length() << endl;
 | 
					        cout << myserver.push(sends) << " " << sends.length() << endl;
 | 
				
			||||||
        cout << "wait client " << endl;
 | 
					        cout << "wait client " << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cout << myserver.obey();
 | 
					        cout << myserver.pull();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    catch (const string err) {
 | 
					    catch (const string err) {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								test/client.o
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/client.o
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							@ -6,21 +6,26 @@ using namespace std;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
    try{
 | 
					    try{
 | 
				
			||||||
        cout << "init server " << endl;
 | 
					 | 
				
			||||||
        server myserver(5000);
 | 
					 | 
				
			||||||
        cout << "init cert " << endl;
 | 
					        cout << "init cert " << endl;
 | 
				
			||||||
        secure crypto ("../example/cert.pem", "../example/privkey.pem");
 | 
					        secure crypto ("../example/cert.pem", "../example/privkey.pem");
 | 
				
			||||||
 | 
					        cout << "init server " << endl;
 | 
				
			||||||
 | 
					        server myserver(5000, 100, crypto.fds);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        cout << "init client " << endl;
 | 
					        cout << "init client " << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        comming myclient(&myserver, 100, crypto.fds);
 | 
					        // client myclient(&myserver, 100, crypto.fds);
 | 
				
			||||||
        // comming myclient(&myserver, 100);
 | 
					        // comming myclient(&myserver, 100);
 | 
				
			||||||
        cout << "wait client " << myclient.ipv4 << endl;
 | 
					        myserver.accept();
 | 
				
			||||||
 | 
					        // cout << "wait client " << myclient.ipv4 << endl;
 | 
				
			||||||
 | 
					        cout << "wait client " << myserver.cli->ipv4 << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        string fromclient =  myclient.obey();
 | 
					        string fromclient =  myserver.cli->pull();
 | 
				
			||||||
 | 
					        // string fromclient =  myclient.pull();
 | 
				
			||||||
        cout << "tell client " << fromclient << endl;
 | 
					        cout << "tell client " << fromclient << endl;
 | 
				
			||||||
        // usleep(600*1000);
 | 
					        // usleep(600*1000);
 | 
				
			||||||
        sleep(5);
 | 
					        sleep(5);
 | 
				
			||||||
        myclient.tell(fromclient);
 | 
					        myserver.cli->push(fromclient);
 | 
				
			||||||
 | 
					        // myclient.push(fromclient);
 | 
				
			||||||
        // myclient.~comming();
 | 
					        // myclient.~comming();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // while (true) {
 | 
					        // while (true) {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								test/server.o
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/server.o
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user