Next Previous Contents

8. Socket

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();


Next Previous Contents