Ok, dato che il progetto è in C++ posso anche buttare giù un pò di codice:
codice:
#include <stdlib.h>
#include <process.h>
#include <iostream>
#include <string>
#include "socket.h"
using namespace std;
unsigned __stdcall Answer(void* a)
{
Socket* s = (Socket*) a;
while(1)
{
// Ora il client viene gestito quì, intanto in main() si aspettano altri client
string r = s->ReceiveLine();
if (r.empty())
break;
cout <<"[Client] " << r << endl;
s->SendLine("Hello, I am the server!");
}
delete s;
return 0;
}
int main()
{
// Mi metto in ascolto sulla porta 8000 (tcp), MAX CONNECTION 5
SocketServer in(8000,5);
while(1)
{
// Aspetto che un client si connetta
Socket* s=in.Accept();
cout << "a client connected..." << endl;
unsigned ret;
// Quando un client si connette lancio un nuovo thread per gestirlo
_beginthreadex(0,0,Answer,(void*) s,0,&ret);
}
system("pause");
return EXIT_SUCCESS;
}
Nel main abbiamo il server in ascolto, ad ogni connessione si crea una nuova istanza (thread) che gestirà il client. Intanto in main rimaniamo in ascolto in attesa di altri clients.
Perciò il punto principale diventa la funzione Answer dove si comunica con il client tramite l'uso di ReceiveLine() e SendLine().
Ora bisognerebbe allacciarsi con il buffer dove intanto il thread principale (capturing/recording) sta scrivendo...quindi già mi ritrovo davanti ad una scelta nel caso ho molti clients connessi allo stesso momento: 5 istanze che leggono lo stesso buffer oppure il thread principale che scrive su 5 istanze di buffer?