28/10/2010, 21:37
|
| | Fecha de Ingreso: marzo-2009
Mensajes: 163
Antigüedad: 15 años, 8 meses Puntos: 0 | |
problema con cliente chat en sockets Que tal a todos, tengo un problema en mi codigo, estoy generando un chat donde el cliente se conecta a un servidor, el servidor los maneja por medio de hilos asi puede llegar a tener mas de 1 cliente conectados a el, y cuando un cliente mande un mensaje este le llega al servidor y el servidor se lo regresa a todos los cliente, genere el siguiente codigo del cliente, me pide mi nickname pero ya no me pide lo que tengo de "Escribe tu mensaje" y no entiendo porque haber si alguien puede ayudarme
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);
}
}
}
|