Socket conectar con nombre del host.

Socket conectar con nombre del host.

Postby Salvador » Wed Jul 29, 2009 2: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
Salvador
 
Posts: 144
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Socket conectar con nombre del host.

Postby Daniel Garcia-Gil » Sat Aug 01, 2009 2:41 pm

Hola Salvador

Como haces la apertura del socket?

muestra el codigo de conexion por favor
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Socket conectar con nombre del host.

Postby Salvador » 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
Salvador
 
Posts: 144
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Socket conectar con nombre del host.

Postby Daniel Garcia-Gil » Sun Aug 02, 2009 4: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" )
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Socket conectar con nombre del host.

Postby Salvador » Sun Aug 02, 2009 7: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
Salvador
 
Posts: 144
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Socket conectar con nombre del host.

Postby Daniel Garcia-Gil » 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: Select all  Expand view  RUN
#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
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Socket conectar con nombre del host.

Postby Salvador » Mon Aug 03, 2009 5: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
Salvador
 
Posts: 144
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Socket conectar con nombre del host.

Postby Daniel Garcia-Gil » Mon Aug 03, 2009 8:07 pm

Salvador

No se cual seria le problema te dejo un ejemplo funcionando
Code: Select all  Expand view  RUN

#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
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Socket conectar con nombre del host.

Postby Salvador » Mon Aug 03, 2009 8: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
Salvador
 
Posts: 144
Joined: Sun Dec 18, 2005 3:18 pm
Location: España


Return to FiveWin para Pocket PC

Who is online

Users browsing this forum: No registered users and 8 guests