No me he leido tu codigo pero te comento lo que se suele hacer en todos los lenguajes
- Inicias un servidor que escuche un puerto.
- Esperas a recibir un Accept (esto te devolvera un filedescriptor en C que sera el socket abierto, o un Socket en Java)
- Pasas ese filedescriptor / socket a un thread, donde sera atendido
Para que te hagas una idea en C tengo algo asi
while( 1 == 1 ) {
client_socket = accept(server_socket, (struct sockaddr *) &client, &client_length);
if (client_socket < 0) {
close(server_socket);
close(client_socket);
} else {
run_dozer_thread(client_socket);
}
}
Donde run dozer thread
/**********************************************
* @Nombre: run_dozer_thread
* @Def: Funcion encargada lanzar el Thread del Dozer
* @Arg: int socket_cliente
* @Ret: void
**********************************************/
void run_dozer_thread(int client_socket) {
pthread_t thread_dozer_id;
pthread_create(&thread_dozer_id, NULL, thread_manage_dozer, (void *)client_socket);
}