La classe Socket consente una veloce e semplice implentazione di client e/o server TCP, UDP, UNIX domain socket.
Server e Client TCP/IP:
...
// Implementing a TCP server
Socket s;
int port = 8000;
if(s.initServerTCP(port))
return -1;
Socket *c;
while((c = acceptTCP()) != NULL) {
char buffer[512];
int nb = c->recv(buffer, sizeof(buffer));
c->send(buffer, sizeof(buffer));
c->close();
}
s.close();
...
...
...
// implementing a TCP client
Socket s;
int port = 8000;
char* host = "localhost";
if(s.initClientTCP(host, port))
return -1;
char buffer[512];
strcpy(buffer, "Hello worl!");
s.send(buffer, sizeof(buffer));
memset(buffer, 0, sizeof(buffer));
s.recv(buffer, sizeof(buffer));
printf("%s\n", buffer);
s.close();
Server e Client UNIX domain socket:
...
// Implementing server
Socket s;
char *filePath = "/tmp/myconnector";
if(s.initServerUNIX(filePath))
return -1;
Socket *c;
while((c = acceptUNIX()) != NULL) {
char buffer[512];
int nb = c->recv(buffer, sizeof(buffer));
c->send(buffer, sizeof(buffer));
c->close();
}
s.close();
...
...
...
// implementing client
Socket s;
char *filePath = "/tmp/myconnector";
if(s.initClientUNIX(filePath))
return -1;
char buffer[512];
strcpy(buffer, "Hello worl!");
s.send(buffer, sizeof(buffer));
memset(buffer, 0, sizeof(buffer));
s.recv(buffer, sizeof(buffer));
printf("%s\n", buffer);
s.close();
Leggermente diverso il client/server UDP a causa del protocollo connection less. Infatti non c'e' in questo caso la funzione accept, ma si fa ricorso ad una classe accessoria DatagramPacket che rappresenta il singolo datagramma inviato o ricevuto.
...
// Implementing a UDP server
Socket s;
int port = 8000;
if(s.initServerUDP(port))
return -1;
// create an empty packet 128 byte length
Socket::DatagramPacket packet(128);
if(s.recvUDP(packet))
return -1;
strcat((char*)packet.data, "World!");
// NOTE: the address of calling client is stored in packet
if(s.sendUDP(packet))
return -1;
s.close();
...
...
...
// implementing a UDP client
Socket s;
int port = 8000;
char* host = "localhost";
if(s.initClientUDP(host, port))
return -1;
// create an empty packet 128 byte length
Socket::DatagramPacket packet(128);
// take the address of server from socket
packet.cpaddrfrom(s);
strcpy((char*)packet.data, "Hello ");
// NOTE: the address of server is stored in packet
if(s.sendUDP(packet))
return -1;
if(s.recvUDP(packet))
return -1;
// this print 'Hello World!'
puts(packet.data);
s.close();