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.
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.
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 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;
Whe 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.
If there are any flaws or mistakes in this article. Just feel free to report this at our Forum