Tengo una aplicación que se comunica con un server mediante sockets.
La conexión funciona si se especifica la dirección ip del server, en cambio si se hace con un nombre de host contratado con “dyndns.com” por ejemplo “mihost.dyndns.org”, la conexión no funciona.
¿Alguien sabe porque?
Gracias de antemano.
Socket conectar con nombre del host.
Socket conectar con nombre del host.
Saludos
Salvador
Salvador
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Socket conectar con nombre del host.
Hola Salvador
Como haces la apertura del socket?
muestra el codigo de conexion por favor
Como haces la apertura del socket?
muestra el codigo de conexion por favor
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Re: Socket conectar con nombre del host.
oSocket := TSocket():New( 8083 )
oSocket:bConnect := { | oSocket | Send(oSocket) }
oSocket:bRead := { | oSocket | CogeDato( oSocket ) }
oSocket:bClose := { || MsgInfo( "Server has closed!" ) }
oSocket:Connect( "miserver.dyndns.org", 8083 ) // no conecta estando sincronizada la IP del server con el dominio
oSocket:Connect("83.56.196.122", 8083 ) // si conecta
Daniel, gracias por tu interés.
oSocket:bConnect := { | oSocket | Send(oSocket) }
oSocket:bRead := { | oSocket | CogeDato( oSocket ) }
oSocket:bClose := { || MsgInfo( "Server has closed!" ) }
oSocket:Connect( "miserver.dyndns.org", 8083 ) // no conecta estando sincronizada la IP del server con el dominio
oSocket:Connect("83.56.196.122", 8083 ) // si conecta
Daniel, gracias por tu interés.
Saludos
Salvador
Salvador
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Socket conectar con nombre del host.
Hola Salvador...
No se que version usa...
verifica que la clase TSocket que usas hace el llamado a la funciuon GetHostByName( AllTrim( cIPServer ) ) , para que reconozca la direccion IP character y la convierta en IP valida, sino haces el llamado a esa funcion primero para que te retorne dicha "ip valida"
nIP = GetHostByName( "miserver.dyndns.org" )
No se que version usa...
verifica que la clase TSocket que usas hace el llamado a la funciuon GetHostByName( AllTrim( cIPServer ) ) , para que reconozca la direccion IP character y la convierta en IP valida, sino haces el llamado a esa funcion primero para que te retorne dicha "ip valida"
nIP = GetHostByName( "miserver.dyndns.org" )
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Re: Socket conectar con nombre del host.
Parece ser que la clase Tsocket necesita una dirección ip como parámetro.
Haciendolo de esta manera: oSocket:Connect(GetHostByName("myserer.dyndns.org"), 8083 ), la aplicación queda colgada en este punto y hay que resetear el Smartphone.
Al parecer la función GetHostByName no funciona correctamente Windows Mobile 6.
Haciendolo de esta manera: oSocket:Connect(GetHostByName("myserer.dyndns.org"), 8083 ), la aplicación queda colgada en este punto y hay que resetear el Smartphone.
Al parecer la función GetHostByName no funciona correctamente Windows Mobile 6.
Saludos
Salvador
Salvador
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Socket conectar con nombre del host.
Hola Salvador...
incluye este codigo al final de tu clase TSocket y une la clase a tu proyecto como si fuese un PRG mas del mismo
incluye este codigo al final de tu clase TSocket y une la clase a tu proyecto como si fuese un PRG mas del mismo
Code: Select all
#pragma BEGINDUMP
#include <hbapi.h>
#include <windows.h>
#include <WinSock.h>
static HB_FUNC( GETHOSTBYNAME ) // ( cName ) --> cIPAddress
{
struct hostent * pHost;
char addr[ 20 ];
strcpy( ( char * ) addr, "0.0.0.0" );
if(( pHost = gethostbyname( hb_parc(1) ) ) != NULL )
{
sprintf( ( char * ) addr, "%i.%i.%i.%i",
( BYTE ) pHost->h_addr[ 0 ], ( BYTE ) pHost->h_addr[ 1 ],
( BYTE ) pHost->h_addr[ 2 ], ( BYTE ) pHost->h_addr[ 3 ] );
}
hb_retc( ( char * ) addr );
}
//---------------------------------------------------------------------------//
#pragma ENDDUMP
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Re: Socket conectar con nombre del host.
Tu código me genera estos errores:
error C2065: 'strcpy_instead_use_StringCbCopyA_or_StringCchCopyA' : undeclared identifier
error C2065: 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' : undeclared identifier
Estas funciones estan declaradas en "stdlib.h" y esta incluida en el proyecto, quizás tengo alguna opción incorrecta en el compìlador.
De todas formas tu código es similar al de la función GetHostByName() que se encuentar en "c:\Fwppc\source\functions\winapi\winsock.c" y que es llamada desde de la clase Tsocket original de Fwppc.
error C2065: 'strcpy_instead_use_StringCbCopyA_or_StringCchCopyA' : undeclared identifier
error C2065: 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' : undeclared identifier
Estas funciones estan declaradas en "stdlib.h" y esta incluida en el proyecto, quizás tengo alguna opción incorrecta en el compìlador.
De todas formas tu código es similar al de la función GetHostByName() que se encuentar en "c:\Fwppc\source\functions\winapi\winsock.c" y que es llamada desde de la clase Tsocket original de Fwppc.
Saludos
Salvador
Salvador
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Socket conectar con nombre del host.
Salvador
No se cual seria le problema te dejo un ejemplo funcionando
http://www.sitasoft.com/fivewin/test/ppc/GetIP.zip
No se cual seria le problema te dejo un ejemplo funcionando
Code: Select all
#include "FWCE.ch"
static oWnd, oSocket
function Main()
local oBtn1, oGetIP
local cIP := Space( 100 )
WSAStartup()
DEFINE WINDOW oWnd TITLE "Test socket"
@ 5, 2 BUTTON oBtn1 PROMPT "Connect" ;
ACTION MsgInfo( GetHostByName( AllTrim( cIP ) ) ) SIZE 80, 20
@ 2,2 GET oGetIP VAR cIP SIZE 200,20
ACTIVATE WINDOW oWnd
return nil
//------------------------------------------------------------//
#pragma BEGINDUMP
#include <hbapi.h>
#include <windows.h>
#include <WinSock.h>
static HB_FUNC( GETHOSTBYNAME ) // ( cName ) --> cIPAddress
{
struct hostent * pHost;
char addr[ 20 ];
strcpy( ( char * ) addr, "0.0.0.0" );
if(( pHost = gethostbyname( hb_parc(1) ) ) != NULL )
{
sprintf( ( char * ) addr, "%i.%i.%i.%i",
( BYTE ) pHost->h_addr[ 0 ], ( BYTE ) pHost->h_addr[ 1 ],
( BYTE ) pHost->h_addr[ 2 ], ( BYTE ) pHost->h_addr[ 3 ] );
}
hb_retc( ( char * ) addr );
}
//---------------------------------------------------------------------------//
#pragma ENDDUMP
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Re: Socket conectar con nombre del host.
Gracias por el ejemplo, funciona perfectamente.
Voy a ver si consigo eliminar los errores al compilar tu función.
Gracias de nuevo por tu atención.
Voy a ver si consigo eliminar los errores al compilar tu función.
Gracias de nuevo por tu atención.
Saludos
Salvador
Salvador