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