Ver Mensaje Individual
  #5 (permalink)  
Antiguo 30/10/2010, 10:09
Perrin_1
 
Fecha de Ingreso: marzo-2009
Mensajes: 163
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: problema con cliente chat en sockets

Este es el codigo de mi server, que es el que recibe por hilos todos los cliente que se conectan, les envian el mensaje y este se supone que le regresa el mensaje pero mi cliente falla

Código:
#include <sys/types.h>
#include <sys/socket.h>
#include <pthread.h>
#include <stdio.h>
#include <netinet/in.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#define MAX_CLIENT 10
int totcltes=0;
int client_sockfd[MAX_CLIENT];
void *coneccion_clte(void *arg);
int main()
    {
    int server_sockfd;
    int server_len, client_len;
    struct sockaddr_in server_address;
    struct sockaddr_in client_address;
    string parametro[MAX_CLIENT];
    pthread_t tid[MAX_CLIENT];
    int i;
    server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
    server_address.sin_family = AF_INET;
    server_address.sin_addr.s_addr = htonl(INADDR_ANY);
    server_address.sin_port = htons(9734);
    server_len = sizeof(server_address);
    bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
    /* Crear una cola de conexiones */
    listen(server_sockfd, 5);
    while(totcltes<MAX_CLIENT) //
    {
        printf("server esperando, clientes atendidos %d\n",totcltes);
        /* Aceptar conexión */
        client_sockfd[totcltes] = accept(server_sockfd,(struct sockaddr *) &client_address, &client_len);
        /*recibe el nombre del cliente*/
        read(client_sockfd[mynum], &parametro[totcltes], 1);
        /* Crea un hilo que atiende al nuevo cliente */
        pthread_create(&tid[totcltes],NULL,coneccion_clte,(void *) &parametro[totcltes]);
        totcltes++;
    }
    for(i=0;i<MAX_CLIENT;i++)
        pthread_join(tid[i],NULL);
}
    void *coneccion_clte(void *arg)
    {
        string msj;
        string *n=(string *) arg;
        int mynum=*n;
        read(client_sockfd[mynum], &msj, 1);
        msj = *n + ": " + msj;
        sleep(5);
        for(int i=0; i<totcltes;++i){
            if(client_sockfd[i] == 0)
                continue;
            write(client_sockfd[i], &msj, 1);
            close(client_sockfd[i]);
        }
        return;
    }