30/10/2010, 10:09
|
| | Fecha de Ingreso: marzo-2009
Mensajes: 163
Antigüedad: 15 años, 8 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], ¶metro[totcltes], 1);
/* Crea un hilo que atiende al nuevo cliente */
pthread_create(&tid[totcltes],NULL,coneccion_clte,(void *) ¶metro[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;
}
|