// Example 3
//Server
#include "ace/OS.h"
#include "ace/SOCK_Dgram.h"
#include "ace/INET_Addr.h"
#define DATA_BUFFER_SIZE
1024
#define SIZE_DATA
18
class Server{
public:
Server(int local_port)
:local_addr_(local_port),local_(local_addr_){
data_buf = new char[DATA_BUFFER_SIZE];
}
//Expect data to arrive from the remote machine.
Accept it and display it.
// After recieveing data immediately send some
data back to the remote.
int accept_data(){
while(local_.recv(data_buf,SIZE_DATA,remote_addr_)!=-1){
ACE_DEBUG((LM_DEBUG, "Data received from remote %s was %s \n"
,remote_addr_.get_host_name(), data_buf));
ACE_OS::sleep(1);
if(send_data()==-1) break;
}
return -1;
}
//Method used to send data to the remote using
the datagram component local_
int send_data(){
ACE_DEBUG((LM_DEBUG,"Preparing to send reply to client %s:%d\n",
remote_addr_.get_host_name(),remote_addr_.get_port_number()));
ACE_OS::sprintf(data_buf,"Server says hello to you too");
if(
local_.send(data_buf, ACE_OS::strlen(data_buf),remote_addr_)==-1)
return -1;
else
return 0;
}
private:
char *data_buf;
ACE_INET_Addr remote_addr_;
ACE_INET_Addr local_addr_;
ACE_SOCK_Dgram local_;
};
int main(int argc, char *argv[]){
Server server(ACE_OS::atoi(argv[1]));
server.accept_data();
}