#include #include #include "UDPTCPNetwork.h" #define DEFAULT_PORT 12345 #if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__) #else void server () { TCP tcpserver; TCP *connection; int i, timeout; pid_t pid; time_t time_start = time (NULL); time_t time_now = time (NULL); char buffer[NET_BUFFERSIZE]; // // start the server if (tcpserver.Listen(DEFAULT_PORT) != 1) { printf ("cloud not start the tcp server\n"); exit (1); } // // check for connections for (;time_now - time_start < 10; time_now = time(NULL)) { connection = tcpserver.Accept(); if (connection != NULL) { // // someone connected - create new process // take care of parallel processing (parent is always the server) // printf (" server: got a connection forking new process\n"); pid = fork(); if (pid == 0) { // // child process - always close server since it will handeled // by the parent process. Make sure the client exits and never // returns. tcpserver.Close(); i = connection->Read(buffer, NET_BUFFERSIZE); if (i > 0) { int c; printf (" server: (child) got: '%s'\n", buffer); for (c = 0; c < i; c++) buffer[c] = toupper(buffer[c]); connection->Write(buffer, i); } // // just delete the class object, it will close the client connection delete (connection); // // exit child process exit (1); } else { // // parent process - just close the client connection // it will be handeled by the child process. delete (connection); } } usleep (25000); } }; void client () { TCP tcpclient; char buffer[NET_BUFFERSIZE]; int i; sleep (1); // wait one second to start the server // // connect to the server if (tcpclient.Connect ("localhost", DEFAULT_PORT) != 1) { printf ("cloud not connect to server\n"); exit (1); } sleep (1); // // send some data snprintf (buffer, NET_BUFFERSIZE, "nur ein kleiner Test."); printf ("client:send '%s' to the server.\n", buffer); if (tcpclient.Write(buffer, strlen (buffer)) != strlen (buffer)) { printf ("could not send all data.\n"); exit (1); } // // read some data (wait maximum 10x1000ms) for (i = 10; i > 0; i--) if (tcpclient.ReadTimeout(buffer, NET_BUFFERSIZE, 1000) > 0) { printf ("client:got '%s' from server.\n", buffer); break; } // // close connection tcpclient.Close(); }; #endif int main (int argc, char **argv) { pid_t pid; #if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__) #else pid = fork(); if (pid == 0) { // child process client(); client(); client(); client(); } else { // parent process server(); } #endif return 0; };