problemas con socket en c
mu buenas.
pregunta sobre sockets:
para una practica estoy creando una aplicacion de chat basada en sockets
la idea es que el codigo que se ejecute en ambas maquinas sea el mismo
yo he planteado un codigo en que se hace un fork y el hijo ejecuta un codigo cliente y el padre uno servidor pa atender las peticiones que emite el cliente de la otra maquina
o sea, cliente1 se conecta con servidor2 y viceversa
el caso es que de esta forma no pueden ser el mismo codigo, ya que cliente1 y servidor2 han de tener a la fuerza el mismo puerto, si no se transmiten nada o yo no lo he lograo...
por lo que ambos codigo son exactamente iguales excepto en el numero de puerto al que se conectan cliente y servidor, que esta cambiado para corresponder con la otra parte de la otra maquina.
no se si me explico mu mal o que... pero bueno, os pego aqui un trozo de codigo, vale?....
chat1.c
*******************
#define PORT1 1500
#define PORT2 1501
...
//parte servidor1
if ((fd=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {
printf("error en socket()\n");
exit(-1);
}
server.sin_family = AF_INET;
server.sin_port = htons(PORT1);
server.sin_addr.s_addr = INADDR_ANY;
bzero(&(server.sin_zero),8);
if(bind(fd,(struct sockaddr*)&server,sizeof(struct sockaddr))==- 1) {
printf("error en bind() \n");
exit(-1);
}
//parte cliente1
if ((escriptura=socket(AF_INET, SOCK_STREAM, 0))==-1){
printf("socket() error\n");
exit(-1);
}
server.sin_family = AF_INET;
server.sin_port = htons(PORT2);
server.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(server.sin_zero),8);
if(connect(escritura, (struct sockaddr *)&server,
sizeof(struct sockaddr))==-1){
printf("connect() error\n");
exit(-1);
}
**********************
chat2.c
#define PORT1 1501
#define PORT2 1500
lo mismo exactamente igual que antes
**********************
claro, esto me da dos codigos distintos, y no me lo aceptaran, porque si no es de esta manera, que tienen los puertos cambiados no hay manera humana de hacer que se conecten.
alguien sabe resolverme este problema? gracias
pregunta sobre sockets:
para una practica estoy creando una aplicacion de chat basada en sockets
la idea es que el codigo que se ejecute en ambas maquinas sea el mismo
yo he planteado un codigo en que se hace un fork y el hijo ejecuta un codigo cliente y el padre uno servidor pa atender las peticiones que emite el cliente de la otra maquina
o sea, cliente1 se conecta con servidor2 y viceversa
el caso es que de esta forma no pueden ser el mismo codigo, ya que cliente1 y servidor2 han de tener a la fuerza el mismo puerto, si no se transmiten nada o yo no lo he lograo...
por lo que ambos codigo son exactamente iguales excepto en el numero de puerto al que se conectan cliente y servidor, que esta cambiado para corresponder con la otra parte de la otra maquina.
no se si me explico mu mal o que... pero bueno, os pego aqui un trozo de codigo, vale?....
chat1.c
*******************
#define PORT1 1500
#define PORT2 1501
...
//parte servidor1
if ((fd=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {
printf("error en socket()\n");
exit(-1);
}
server.sin_family = AF_INET;
server.sin_port = htons(PORT1);
server.sin_addr.s_addr = INADDR_ANY;
bzero(&(server.sin_zero),8);
if(bind(fd,(struct sockaddr*)&server,sizeof(struct sockaddr))==- 1) {
printf("error en bind() \n");
exit(-1);
}
//parte cliente1
if ((escriptura=socket(AF_INET, SOCK_STREAM, 0))==-1){
printf("socket() error\n");
exit(-1);
}
server.sin_family = AF_INET;
server.sin_port = htons(PORT2);
server.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(server.sin_zero),8);
if(connect(escritura, (struct sockaddr *)&server,
sizeof(struct sockaddr))==-1){
printf("connect() error\n");
exit(-1);
}
**********************
chat2.c
#define PORT1 1501
#define PORT2 1500
lo mismo exactamente igual que antes
**********************
claro, esto me da dos codigos distintos, y no me lo aceptaran, porque si no es de esta manera, que tienen los puertos cambiados no hay manera humana de hacer que se conecten.
alguien sabe resolverme este problema? gracias
Hola, alguna vez hiciste un servidor ( o un cliente) de FTP me podrias dar una mano?
espero tu respuesta a: [email protected]
espero tu respuesta a: [email protected]
Por que usas dos puertos ????
Usa solo uno, el tema es el siguiente, el servidor únicamente se dedicará a escuchar datos en ese puerto y a mostrar los mensajes por pantalla, mientras que el cliente mandara mensajes a dicho puerto pero a la maquina que a ti te plazca.
Supongo que tal como describes la aplicación estaras haciendo un chat en plan privado que sea en plan enviar mensajes privados como el messenger, si quieres hacer que en el mismo canal vean los mensajes multitud de usuarios piensa en multicast para simplificarlo.
Si me describes claramente como quieres hacer el chat quiza te pueda ayudar en algo mas.
Suerte.
Con respecto al del cliente y servidor FTP se hace como una aplicación cliente servidor normal, pero ten cuidadin a la hora de enviar los datos pq si son modo texto no vas a tener problemas, pero ay amigo! como quieras mandar binarios, ten en cuenta las distintas aquitecturas de las maquinas.
Usa solo uno, el tema es el siguiente, el servidor únicamente se dedicará a escuchar datos en ese puerto y a mostrar los mensajes por pantalla, mientras que el cliente mandara mensajes a dicho puerto pero a la maquina que a ti te plazca.
Supongo que tal como describes la aplicación estaras haciendo un chat en plan privado que sea en plan enviar mensajes privados como el messenger, si quieres hacer que en el mismo canal vean los mensajes multitud de usuarios piensa en multicast para simplificarlo.
Si me describes claramente como quieres hacer el chat quiza te pueda ayudar en algo mas.
Suerte.
Con respecto al del cliente y servidor FTP se hace como una aplicación cliente servidor normal, pero ten cuidadin a la hora de enviar los datos pq si son modo texto no vas a tener problemas, pero ay amigo! como quieras mandar binarios, ten en cuenta las distintas aquitecturas de las maquinas.
