Есть код..
#include <stdio.h>
#include "winsock2.h"
#include <iostream>
#include <fstream>
using namespace std;
#define MAX_PACKET_SIZE 500000
class Vkontakte
{
private:
SOCKET s;
sockaddr_in dest;
char buffer[MAX_PACKET_SIZE];
char req[1024];
bool connected;
public:
Vkontakte(char * server, int port)
{
...
}
~Vkontakte()
{
...
}
int connect()
{
...
}
int send(char * request)
{
...
}
int send()
{
...
}
char * recv()
{
int len = 0,slen=0;
do
{
if (SOCKET_ERROR == (len = ::recv (s, (char *) &buffer, MAX_PACKET_SIZE, 0) ) )
cout<<WSAGetLastError ();
slen+=len;
}
while (len!=0);
cout<<slen<<endl;
buffer[slen]='\0';
return buffer;
}
//------ Gen Request
void genmessage(char * server,int mt,char * path,char * useragent,char *);
};
void Vkontakte::genmessage(char * server,int mt,char * path,char * useragent,char * postdata=0)
{
...
}
int main()
{
char * useragent="Opera/9.64 (Windows NT 6.1; U; ru) Presto/2.1.1";
Vkontakte check("forum.antichat.ru",80);
check.connect();
check.genmessage("forum.antichat.ru",1,"/",useragent,NULL);
check.send();
ofstream in("c:\\vks\\ok2.html");
in<<check.recv();
in.close();
return 0;
}
Вопрос следующий, при принятии любого хтмл документа через интернет мы в классе выделяем под него аж
#define MAX_PACKET_SIZE 500000
500 000 байт так как sizeof(char)=1
бессмысленно да? а есть ли ограничение по этому размеру?
вопрос такой. Недавно тут натолкнули на WinInet сказали мол это незапарно и не надо самому ничего писать. Интересует исходник функции
HttpOpenRequest
HttpSendRequest
HttpReadFile
как они работают. Хотелось бы взглянуть на грамотную реализацию генератора запросов и как реализовывается решение моей проблемы с динамическим буфером для хранения ответа сервера.. и еще один дополнительный вопрос.
Почему всегда приходиться пользоваться функцией strcat чтобы добавить в конец строки какой то набор символов? я так понимаю она двигает указатель по исходной строке до тех пор пока не встретиться \0 далее вставляет данные и потом снова ставит \0?
И еще последний вопрос) Когда функция recv пишет в буффер в данном случае char buffer[500000] почему она не ставит в конце нулевой символ? так и должно быть?