Socket conectar con nombre del host.

Post Reply
Salvador
Posts: 142
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Socket conectar con nombre del host.

Post by Salvador »

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
User avatar
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.

Post by Daniel Garcia-Gil »

Hola Salvador

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

Re: Socket conectar con nombre del host.

Post by Salvador »

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
User avatar
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.

Post by Daniel Garcia-Gil »

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" )
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
Salvador
Posts: 142
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Socket conectar con nombre del host.

Post by Salvador »

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
User avatar
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.

Post by Daniel Garcia-Gil »

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

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

Re: Socket conectar con nombre del host.

Post by Salvador »

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
User avatar
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.

Post by Daniel Garcia-Gil »

Salvador

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
 
http://www.sitasoft.com/fivewin/test/ppc/GetIP.zip
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
Salvador
Posts: 142
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Socket conectar con nombre del host.

Post by Salvador »

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
Post Reply