Socket под win32 на API
Пытаюсь написать приложение для отправки http-запросов на С. Если кто писал киньте плиз рабочий пример создания сокета, передачи данных и получения ответа (желательно чтобы написано было на API, т.е. с использованием функций socket(), connect(), send(), recv() и т.п.).
Пишу так:
#include <stdafx.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <sys/types.h>
#include <winsock.h>
#include <sstream>
int main(int argc, char* argv[])
{
int sock;
char message[5000] = "GET / HTTP/1.0\n\n";
char buf[10000] = "";
SOCKADDR_IN addr;
sock = socket(AF_INET,SOCK_STREAM,0);
if (sock != -1)
printf("> socket created\n");
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("195.68.222.173");
addr.sin_port = htons (80);
bind (sock,(LPSOCKADDR)&addr, sizeof(struct sockaddr));
connect(sock,(struct sockaddr *)&addr,sizeof(addr));
send(sock, message, sizeof(message), 0);
recv(sock, buf, 100, 0);
printf("%s",buf);
return 0;
}
В резльтате сокет не создается. Немогу понять почему.
Спасибки.
Пробую, как написано в примере. При компиляции ошибки.
syntax error : missing ';' before identifier 'lpWSAData'
и
'WSADATA' : missing storage-class or type specifiers
Совместил пример со своим кодом. Все заработало. написал так:
#include <stdafx.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <sys/types.h>
#include <winsock.h>
#include <sstream>
int main(int argc, char* argv[])
{
int sock;
char message[5000] = "GET / HTTP/1.0\n\n";
char buf[10000] = "";
SOCKADDR_IN addr;
WSADATA lpWSAData;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("195.68.222.173");
addr.sin_port = htons (80);
WSAStartup(MAKEWORD(1,1),&lpWSAData); // этой функции не хватало
if ((sock = socket(AF_INET,SOCK_STREAM,0)) != -1)
printf("> socket created\n");
if ((bind (sock,(LPSOCKADDR)&addr, sizeof(struct sockaddr))) != 0)
printf("> socket binded\n");
connect(sock,(struct sockaddr *)&addr,sizeof(addr));
send(sock, message, sizeof(message), 0);
recv(sock, buf, 100, 0);
printf("%s",buf);
return 0;
}
Спасибки за помощь!
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
);
:!!!:
Да и еще, одного меня арздражает структура SOCKADDR_IN ?:) Какая та она слдишком не читабельная....:D