Using the TCP/IP Server

Preface

The disko lbrary does contain various functions for the application programmer. One of them is a simple to use TCP/IP server which shall be shown in this tutorial. The server working with various interfaces for a single port. The communication has to be set up, that the involved interfaces act in a cooperative way.

Involved Classes

The classes involved in this are MMSTCPServer, MMSServerInterface and MMSTCPClient. The MMSTCPServer contains the Server functionalities, it takes a vector of interface classes (MMSServerInterface) that will process the requests. The MMSTCPClient class is used to connect to a TCP/IP server, and to send and receive some messages.

The Server

First step to implement a basic server is to derive a server interface from the MMSServerInterface class and to overwrite the processRequest() method.

class MyInterface : public MMSServerInterface {
    public:
        MyInterface() : MMSServerInterface("iface1") {};
        ~MyInterface() {};
        bool processRequest(string *request, string *answer);
};

bool MyInterface::processRequest(string *request, string *answer) {

    cout << "request is: " << *request << endl;
    answer->append("request done!\n");
    return true;
}

Then create an instance and append it to the interface vector.

MyInterface *iface = new MyInterface();
<MMSServerInterface*> interfaces;
interfaces.push_back(iface);

After that create an instance of the server passing the interface vector listen address and port to the constructor and start the server.

MMSTCPServer *server = new MMSTCPServer(interfaces,"127.0.0.1",11111);
server->start();

The client

The client is fairly easy to use. Just create an instance of the MMSTCPClient passing the target address and port to the constructor. After that just send a message to the server.

MMSTCPClient *client = new MMSTCPClient("127.0.0.1",11111);
string retstr;
client->sendAndReceive("Heres my client message!", &retstr);

cout  << "answer was: " << retstr << endl;

When all went well the server should print request is: Heres my client message! and the client should print answer was: request done!.

A sample server and client application can be downloaded from here. To compile & link the sample type make in the root directory of the sample application.