Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Elegir puerto local en TClientsocket

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Elegir puerto local en TClientsocket Responder citando

Hola:

Estoy utilizando el componente TClientSocket y me conento con el sevidor sin problemas.

He encontrado un servidor que comprueba que el cliente mande las peticiones por un puerto determinado y si no las rechaza.
He estado buscando y parece que con la funcion bind() se puede realizar, pero no se como funciona. ¿me podriais ayudar?

El problema es asignar un puerto determinado en el cliente para hacer las peticiones.

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

bind es para el servidor a bajo nivel.

No puedes cambiar el puerto de un TClienntSocket mientras esté conectado, pero si puedes hacer esto:

Código:

   ClientSocket1->Close();
   ClientSocket1->Port = 1;
   ClientSocket1->Open();



Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchas gracias por tu respuesta, pero con la solucion que propones se asigna el puerto remoto al que quieres conectarte.

Mi pregunta es como se puede asignar el puerto desde el pc donde estas corriendo el programa.

Con el componente TClienntSocket asignas la direccion IP donde quieres conectarte, el puerto del servidor donde quieres realizar la conexion y yo quiero configurar el puerto de mi pc desde donde quiero realizar la conexion.

Un saludo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Un puerto no es remoto o local, no es una dirección. Debes configurar el mismo puerto en el cliente y en el servidor. En el protocolo TCP el servidor se pone a la escucha en un determinado puerto, cuando un cliente accede a la IP del servidor en ese puerto, el servidor acepta, o no la conexión. Si se establece conexión, empieza la comunicación. El servidor asocia un puerto a su socket mediante la función bind (a bajo nivel). El protocolo UDP no requiere conexión previa.

El cliente siempre debe usar el puerto por el que escucha el servidor.

Si lo que pretendes es conectarte a un servidor que se encuentra en un PC, debes asignar a tu cliente la dirección IP Localhost (127.0.0.1) y el puerto correspondiente por el que escucha el servidor localizado en tu PC.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Otra vez muchas gracias por tu respuesta.

He comprobado que el cliente TCP del builder realiza la conexión por un puerto diferente al del servidor que se quiere conenectar. Si configuramos:

ClientSocket1->1;

Nos referimos a que queremos conectarnos al puerto 1 del servidor con la direccion IP que hayamos configurado, pero no significa que el cliente este utilizando ese puerto para realizar la conexión.

Este "problema" con el builder lo habia escuchado antes y no sabia si se habia solucionado.

Muchas gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Nunca tuve el problema de que al asignar el puerto luego no sea ese puerto., en cualquier caso y por si tu versión tuviese un bug, deja en fase de diseño el puerto y dirección apropiada, la propiedad active = false. Para evitar conflictos y si quieres que la conexión se realice de forma automática, coloca un timer con untervalo 1000. y deshabilitado.
En el constructor de tu formulario, habilita el timer.
En el evento del timer:
Código:

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  Timer1->Enabled = false;
  ClientSocket1->Por = MIPUERTO;
  ClientSocket1->Address = MIDIRECCION;
  ClientSocket1->Active = true;
  ClientSocket1->Open();
}

Esto asegura por código que la dirección y puerto son apropiadas antes de intentar la conexión.

En lugar de un timer puedes usar un botón, si quieres que la conexión no sea automática al iniciar tu formulario.


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias escafranda por tu respuesta.

Quizas me estoy explicando mal, con
ClientSocket1->Port = 111;

me conecto perfectame al puerto remoto del server, lo que quiero es conectarme a traves de un puerto determinado de mi pc

ejemplo:

cliente servidor
IP 192.168.1.1 IP 192.168.1.2
Puerto: 222 Puerto 111

Quiero conectar el cliente con el servidor y me conecto bien, pero lo que no consigo es realizar la conexion por el puerto 222 del cliente. El buider coge un puerto aleatorio no el que quiero que sea (en el caso del ejemplo el 222)

Muchas gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Edito otra vez para que se vea mejor el ejemplo

cliente servidor
IP 192.168.1.1 IP 192.168.1.2
Puerto: 222 Puerto 111
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

No puedes conecterte por un puerto distinto al servidor. Tanto cliente como servidor deben estar en el mismo puerto.

Si quieres otro puerto debes cambiar tanto cliente como servidor.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchas gracias escafandra por tus respuestas.

Un saludo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.