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 

Conexión mediante Winsock

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Conexión mediante Winsock Responder citando

Necesito saber como conectarme con las API del Winsock a otro equipo el cual pueda aguantar multiples conexiones. He revisado los ejemplos, pero no me queda claro donde poner la dirección del equipo, si en la variable SOCKERADD o en la variable SOCKET que se ocupan en la función CONNECT.
Volver arriba
Mensaje    Asunto: Conexión mediante Winsock Responder citando

Hola,

Este es el ejemplo mas basico de winsock usando tcp, no se si será esto lo que necesitas... de todos modos te recomiendo que visites http://www.stardust.com/winsock/index.htm
encontraras muchos ejemplos e información sobre winsock, aunque la verdad que te recomendaria más que usases cualquier clase de tantas que hay que encapsulan el winsock.

Bueno, al grano, añade un TMemo y un TButton al form y añade este código al evento OnClick del TButton:


WSADATA wsaData;
int nRet;

//--- Inicializar winsock
nRet = WSAStartup(MAKEWORD(1,1), &wsaData);
if (nRet)
{
ShowMessage("No se pudo iniciar winsock");
WSACleanup();
return;
}

char *szServer = "www.w3.org", *szFile = "/";
IN_ADDR iaHost;
LPHOSTENT lpHostEntry;

iaHost.s_addr = inet_addr(szServer);
if (iaHost.s_addr == INADDR_NONE)
{
// Error: no encontro una cadena validad de IP, por lo que
// suponemos que se esta utilizando el nombre del servidor
lpHostEntry = gethostbyname(szServer);
}
else
{
// Se encontro una cadena de IP valida
lpHostEntry = gethostbyaddr((const char *)&iaHost,
sizeof(struct in_addr), AF_INET);
}

if (lpHostEntry == NULL)
{
ShowMessage("Error: dirección no valida");
return;
}

//--- Creamos un socket TCP/IP
SOCKET Socket;
Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (Socket == INVALID_SOCKET)
{
ShowMessage("Socket no valido");
return;
}

//--- rellenamos el resto de los datos del server
SOCKADDR_IN saServer;
saServer.sin_port = htons(80); //puerto 80 http
saServer.sin_family = AF_INET;
saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);

//--- conectamos el socket
nRet = connect(Socket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
ShowMessage("Error intentando conectar");
closesocket(Socket);
return;
}

//--- creamos la cadena de consulta al servidor HTTP
char szBuffer[1024];

sprintf(szBuffer, "GET %s\n", szFile);
nRet = send(Socket, szBuffer, strlen(szBuffer), 0);
if (nRet == SOCKET_ERROR)
{
ShowMessage("Error enviando datos");
closesocket(Socket);
return;
}

//--- recibimos los datos del server
while(1)
{
// nRet = Número de bytes recibidos
nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0);
if (nRet == SOCKET_ERROR)
{
ShowMessage("Error recibiendo datos");
break;
}

// comprueba si el server a cerrado la conexión
if (nRet == 0)
break;

// copia los datos en el TMemo
Memo1->Lines->Add(szBuffer);
}

closesocket(Socket);

//--- Cierra winsock
WSACleanup();


...este ejemplo es muy basico y bloquea la tarea principal mientras esta recibiendo datos, tendrias que ponerlo en un Thread aparte u otro tipo de socket, etc...
...espero que te sirva.

Saludos.
_Leo

Volver arriba
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.