Dev - C++ - PROBLEMA CON SERVIDOR CHAT en c

 
Vista:

PROBLEMA CON SERVIDOR CHAT en c

Publicado por Jorge Arturo Jacome Garcia (1 intervención) el 30/10/2010 18:18:24
Que tal a todos, estoy haciendo un servidor chat basico, que este por medio de threads, pueda manejar n cantidad de clientes que se conecten a el, donde una vez que se conecten cada cliente debe de ingresar un nickname y comenzar a escribir, se sale del chat hasta que el usuario escribe exit, y el servidor debe de hacer que todos los clientes vean los mensajes que escriben.

El problema que se me presenta es el cliente, tengo todo desarrollado donde por hilos lee y escribe en el socket el mensaje pero con la funcion que tengo no logra llegar hasta esa fase, nose si alguien puede ayudarme este es el codigo de mi cliente

Código:

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
void *writetoserver(void *arg);
void *readfromserver(void *arg);
int sockfd;
int main()
{
int len;
struct sockaddr_in address;
int result;
char* nickname;
pthread_t wThread, rThread;
//Pide usuario
printf("Escribe un nickname para iniciar el nuevo Messenger: ");
scanf("%s",&nickname);
/* Crear un socket para el cliente */
sockfd = socket(AF_INET, SOCK_STREAM, 0);
/* Nombrar el socket, de acuerdo con el server */
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = htons(9734);
len = sizeof(address);
result = connect(sockfd, (struct sockaddr *)&address, len);
if(result == -1)
{
perror("oops: client1");
exit(1);
}

write(sockfd, nickname, 1);
read(sockfd, nickname, 1);
/* Crea un hilo que espera a que el cliente escriba */
pthread_create(&wThread,NULL,writetoserver,NULL);
/* Crea un hilo que espera a que el servidor mande mensajes */
pthread_create(&rThread,NULL,writetoserver,NULL);

pthread_join(wThread,NULL);
pthread_join(rThread,NULL);

close(sockfd);

return 0;
}

void *writetoserver(void *arg)
{
char* msg;
while(strcmp(msg,"exit")!= 0)
{
printf("Escribe tu mensaje");
scanf("%s",msg);
write(sockfd, msg, 1);
}
}

void *readfromserver(void *arg)
{
char* in;
while(strcmp(in,"exit")!=0)
{
read(sockfd, in, 1);
if(strcmp(in,"msj") == 1)
{
read(sockfd, in, 1);
printf(" %s",in);
}
}
}

server
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;
}

LA PARTE QUE NO SE EJECUTA ES LA DE WRITEONSERVER, PORQUE nunca me pide que escriba el mensaje y no entiendo porque espero que me puedan ayudar

saudos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:PROBLEMA CON SERVIDOR CHAT en c

Publicado por Jose Luis Elvira (1 intervención) el 17/11/2010 17:39:07
Hola Jorge Arturo, no tengo problemas con que investiguen sobre las practicas en internet. Pero eso es una cosa, y otra es pedir que se los hagan, lo cual no estoy de acuerdo. Creo que debemos hablar muy seriamente sobre este tema, por el momento hasta no hablarlo tu practica queda suspendida

Espero no tener que llegar a hablar con el consejo por este tema, te espero lo antes posible en mi cubículo. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar