You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libUDPTCPNetwork/test-tcp.cc

133 lines
2.7 KiB

#include <string.h>
#include <unistd.h>
#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;
};