FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Pocket PC Socket conectar con nombre del host.
Posts: 144
Joined: Sun Dec 18, 2005 03:18 PM
Socket conectar con nombre del host.
Posted: Wed Jul 29, 2009 02:18 PM

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.

Saludos

Salvador
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Socket conectar con nombre del host.
Posted: Sat Aug 01, 2009 02:41 PM

Hola Salvador

Como haces la apertura del socket?

muestra el codigo de conexion por favor

Posts: 144
Joined: Sun Dec 18, 2005 03:18 PM
Re: Socket conectar con nombre del host.
Posted: Sat Aug 01, 2009 10:42 PM

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.

Saludos

Salvador
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Socket conectar con nombre del host.
Posted: Sun Aug 02, 2009 04:15 AM

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" )

Posts: 144
Joined: Sun Dec 18, 2005 03:18 PM
Re: Socket conectar con nombre del host.
Posted: Sun Aug 02, 2009 07:10 PM

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.

Saludos

Salvador
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Socket conectar con nombre del host.
Posted: Sun Aug 02, 2009 11:41 PM
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

Code (fw): Select all Collapse
#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
Posts: 144
Joined: Sun Dec 18, 2005 03:18 PM
Re: Socket conectar con nombre del host.
Posted: Mon Aug 03, 2009 05:55 PM

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.

Saludos

Salvador
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Socket conectar con nombre del host.
Posted: Mon Aug 03, 2009 08:07 PM
Salvador

No se cual seria le problema te dejo un ejemplo funcionando
Code (fw): Select all Collapse
#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


http://www.sitasoft.com/fivewin/test/ppc/GetIP.zip
Posts: 144
Joined: Sun Dec 18, 2005 03:18 PM
Re: Socket conectar con nombre del host.
Posted: Mon Aug 03, 2009 08:33 PM

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.

Saludos

Salvador

Continue the discussion