Не помещаются данные, массивы..
От: r1der Россия  
Дата: 08.10.09 20:39
Оценка: :))
Есть код..


#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] почему она не ставит в конце нулевой символ? так и должно быть?
icq 314624
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.