🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.os.linux.programacion
6 messages
6 total messages Started by fran Thu, 27 Jul 2006 03:19
socket en red no me funciona
#904
Author: fran
Date: Thu, 27 Jul 2006 03:19
18 lines
2105 bytes
Hola a todos,

Estoy comenzando a trabajar con sockets TCP sobre linux en C, los
cuales (cliente y servidor) me funcionan perfectamente dentro de mi pc,
el problema esta al colocar el servidor en un computador y el cliente
en otro. No logro realizar la comunicación. Cuando dejo mi servidor
TCP corriendo y realiza netstat -ta, puedo ver que el puerto esta
abierto, pero mi cliente (que esta en otro pc con linux dentro de mi
intranet) no se conecta a este servidor, en cambio si a mi cliente le
cambio el puerto a 22 para ver si se conecta con otros servidor el
servidor ssh si le contesta.
Me pueden decir que estoy haciendo mal?, debo desactivar algo?, o
habilitar algun puerto?.
Saludos y gracias.
P.D.: no inclui ningun codigo, porque lo que he hecho es igual a los
ejemplo que he encontrado en la red, por ejemplo en
http://daniellerch.com/sources/examples/sockets.html (claro que utilizo
los ip de mis computadores en lugar de localhost).
Re: socket en red no me funciona
#905
Author: Pascal Bourguignon
Date: Thu, 27 Jul 2006 03:40
28 lines
2586 bytes
"fran" <prubtest8@hotmail.com> writes:

> Hola a todos,
>
> Estoy comenzando a trabajar con sockets TCP sobre linux en C, los
> cuales (cliente y servidor) me funcionan perfectamente dentro de mi pc,
> el problema esta al colocar el servidor en un computador y el cliente
> en otro. No logro realizar la comunicaci�n. Cuando dejo mi servidor
> TCP corriendo y realiza netstat -ta, puedo ver que el puerto esta
> abierto, pero mi cliente (que esta en otro pc con linux dentro de mi
> intranet) no se conecta a este servidor, en cambio si a mi cliente le
> cambio el puerto a 22 para ver si se conecta con otros servidor el
> servidor ssh si le contesta.
> Me pueden decir que estoy haciendo mal?, debo desactivar algo?, o
> habilitar algun puerto?.
> Saludos y gracias.
> P.D.: no inclui ningun codigo, porque lo que he hecho es igual a los
> ejemplo que he encontrado en la red, por ejemplo en
> http://daniellerch.com/sources/examples/sockets.html (claro que utilizo
> los ip de mis computadores en lugar de localhost).

Vale.  La soluci�n es simplis�ma.  No incluyo ningun codigo, porque es
igual a los ejemplos que se encuentran en la red.

-- 
__Pascal Bourguignon__                     http://www.informatimago.com/

"A TRUE Klingon warrior does not comment his code!"
Re: socket en red no me funciona
#906
Author: heltena
Date: Thu, 27 Jul 2006 07:45
23 lines
2384 bytes
¿el puerto es menor de 1024 y el servidor no lo ejecutas como root?


fran ha escrito:

> Hola a todos,
>
> Estoy comenzando a trabajar con sockets TCP sobre linux en C, los
> cuales (cliente y servidor) me funcionan perfectamente dentro de mi pc,
> el problema esta al colocar el servidor en un computador y el cliente
> en otro. No logro realizar la comunicación. Cuando dejo mi servidor
> TCP corriendo y realiza netstat -ta, puedo ver que el puerto esta
> abierto, pero mi cliente (que esta en otro pc con linux dentro de mi
> intranet) no se conecta a este servidor, en cambio si a mi cliente le
> cambio el puerto a 22 para ver si se conecta con otros servidor el
> servidor ssh si le contesta.
> Me pueden decir que estoy haciendo mal?, debo desactivar algo?, o
> habilitar algun puerto?.
> Saludos y gracias.
> P.D.: no inclui ningun codigo, porque lo que he hecho es igual a los
> ejemplo que he encontrado en la red, por ejemplo en
> http://daniellerch.com/sources/examples/sockets.html (claro que utilizo
> los ip de mis computadores en lugar de localhost).
Re: socket en red no me funciona
#907
Author: fran
Date: Thu, 27 Jul 2006 14:11
110 lines
4897 bytes
Pascal Bourguignon ha escrito:


> Vale.  La solución es simplisíma.  No incluyo ningun codigo, porque es
> igual a los ejemplos que se encuentran en la red.
>
> --
> __Pascal Bourguignon__                     http://www.informatimago.com/
>
> "A TRUE Klingon warrior does not comment his code!"

Este es el codigo de mi servidor.... lo hago correr como root y he
usado puertos superiores al 1024, en este caso el 12340.
Saludos y gracias

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

#define PORT 12340 /*Puerto que utilizaremos*/
#define BACKLOG 10 /*numero maximo de conecciones permitidas*/

/***************************************************************************************/
/*pruea para definir mi propio ip, esto lo agregue porque pense que
INADDR_ANY podria
ser el problema, aunque es muy poco probable*/
char * mi_name = "192.168.1.192";
/***************************************************************************************/
main()
{
	int sockDes,sockDesC; /*Descriptores del socket*/
	/*para informacion de las direcciones del serivodr y del cliente*/
	struct sockaddr_in server;
/***************************************************************************************/
	/*pruea para definir mi propio ip*/
	struct hostent *server_host_name;
/***************************************************************************************/
	struct sockaddr_in client;
	int sin_size;
	char comando[5]; /*bufer para almacenar el comando envia desde el
cliente*/
	char * str = "traza"; /*traza a enviar*/
	/*Creamos el socket*/
	sockDes = socket(AF_INET, SOCK_STREAM, 0);
/***************************************************************************************/
	/*pruea para definir mi propio ip*/
	if((server_host_name = gethostbyname(mi_name)) == 0){
		perror("Error al resolver el host local\n");
		exit(1);
	}
/***************************************************************************************/
	if(sockDes == -1){
		printf("Error al crear el socket\n");
		exit(-1);
	}
	/*llenamos los datos del servidor, son 4 campos de la estructura
sockaddr_in*/
	server.sin_family = AF_INET;
	server.sin_port = htons(PORT);
	server.sin_addr.s_addr = INADDR_ANY;
	server.sin_addr.s_addr = ((struct in_addr
*)(server_host_name->h_addr))->s_addr;
	bzero(server.sin_zero,8);
	/*llamamos a bind()*/
	if(bind(sockDes,(struct sockaddr *)&server,sizeof(server))== -1){
		printf("Error al llamar bind()\n");
		exit(-1);
	}
	/*esperamos coneccion,maximo 10 conecciones*/
	if(listen(sockDes, BACKLOG) == -1){
		printf("Error en listen()\n");
		exit(-1);
	}
	/*esperamos conecciones*/
	printf("Esperando conecciones...\n");
	/*Realizamos la accion correpondiente cuenado alguien se conecta*/
	while(1){
		sin_size = sizeof(struct sockaddr_in);
		sockDesC = accept(sockDes, (struct sockaddr *)&client, &sin_size);
		if(sockDesC == -1){
			printf("Error aceptar socket\n");
			exit(-1);
		}
		/*muestra el ip del que se conecto*/
		printf("Se obtuvo una conexión desde %s\n",
inet_ntoa(client.sin_addr) );
		if(recv(sockDesC, comando, 5, 0) == -1){
			printf("fallo en recv()\n");
			exit(-1);
		}
		printf("El comando recibido es: %s\n",comando);

		printf("La respuesta es: %s\n",str);
		/*if(comando == "envia"){*/
			if(send(sockDesC, str, strlen(str),0) == -1){
				printf("Error al enviar\n");
				exit(-1);
			}
		/*}*/
		close(sockDesC);
	}
}
Re: socket en red no me funciona
#908
Author: Oscar Garcia
Date: Thu, 27 Jul 2006 14:15
44 lines
2730 bytes
On 26 Jul 2006 20:19:34 -0700, "fran" <prubtest8@hotmail.com> wrote:
>Estoy comenzando a trabajar con sockets TCP sobre linux en C, los
>cuales (cliente y servidor) me funcionan perfectamente dentro de mi pc,
>el problema esta al colocar el servidor en un computador y el cliente
>en otro. No logro realizar la comunicaci�n.

�Qu� puertos usas en una y otra aplicaci�n? �Tienes firewall en uno u
otro equipo? �Has probado a desactivarlos?

> Cuando dejo mi servidor
>TCP corriendo y realiza netstat -ta, puedo ver que el puerto esta
>abierto, pero mi cliente (que esta en otro pc con linux dentro de mi
>intranet) no se conecta a este servidor, en cambio si a mi cliente le
>cambio el puerto a 22 para ver si se conecta con otros servidor el
>servidor ssh si le contesta.

�Est�s seguro que es tu aplicaci�n la que tiene abierto el puerto y no
otra distinta?

>Me pueden decir que estoy haciendo mal?, debo desactivar algo?, o
>habilitar algun puerto?.

Veamos.. revisemos el c�digo.. ahh! si no has mandado c�digo..
entonces no s� ni el puerto que usas, ni el protocolo.. :)

>Saludos y gracias.

De nada.

>P.D.: no inclui ningun codigo, porque lo que he hecho es igual a los
>ejemplo que he encontrado en la red, por ejemplo en
>http://daniellerch.com/sources/examples/sockets.html (claro que utilizo
>los ip de mis computadores en lugar de localhost).

P.D.: He hecho un programa que funciona correctamente, no te env�o el
c�digo porque supongo que no es necesario, es igual al ejemplo de
http://daniellerch.com/sources/examples/sockets.html :)

Saludos.

-- 
�scar Javier Garc�a Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Re: socket en red no me funciona
#909
Author: Oscar Garcia
Date: Thu, 27 Jul 2006 16:41
29 lines
1972 bytes
El 27 Jul 2006 07:11:50 -0700, "fran" <prubtest8@hotmail.com>
escribi�:
>	server.sin_addr.s_addr = ((struct in_addr
>*)(server_host_name->h_addr))->s_addr;

Me funciona perfectamente si comento esta l�nea (por la IP que es
distinta en mi caso).

Supongo que si cambio la IP deber�a funcionar perfectamente, pero ah�
no veo el problema (se supone que est� bien).

Viendo el c�digo yo descartar�a un error de la aplicaci�n y pensar�a
en que tienes el firewall que te impide recibir conexiones al puerto
12340.

Te recomiendo que hagas esto antes de ejecutar la aplicaci�n:

iptables -t filter -F INPUT

Con eso eliminar�s toda regla de filtrado que tubieras configurada.

Prueba de nuevo despu�s de hacer esto.

Un saludo.

-- 
�scar Javier Garc�a Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads