На чём компилировать?

Тема в разделе "Общие вопросы по С и С++", создана пользователем Satell, 7 июл 2007.

  1. Satell

    Satell Гость

    Borland C++ 4.5
    unable to open include file winsock2.h
    unable to open include file string

    Borland C++ 5.02 с средой разработки
    unable to open include file sstream.h

    Borland C++ 5.5 без среды разработки
    bcc32.exe pop3.cpp
    unable to open include file winsock2.h
    unable to open inclue file string
    unable to open include file algorithm

    unable to open include file sstream


    C++BuilderX
    Unable to open include file 'sstream.h'
    и куча других ошибок
    Выбираю Project Make pop3.cpp
    и не понятно что выбирать, какой проджект делать, выбираю консольное приложение

    Код (Text):
    #include "pop3.h"
    #include "md5/md5.h"
    #include <algorithm>     // std::copy
    #include <sstream>

    const std::string crlf_ = "\xD\xA\x0";

    pop3Client::pop3Client()
    : _rec(), _con(), _socket(), _timeStamp()
    {
    }
    /*----------------------------------------------------------------------------*/
    pop3Client::~pop3Client()
    {
    if(_socket != 0)
    {
    ::closesocket(_socket);
    _socket = 0;
    }
    ::WSACleanup();
    }
    /*----------------------------------------------------------------------------*/
    bool pop3Client::checkError(const std::string& data)
    {
    if(data.at(0) == '-')
    {
    return false;
    }
    return true;
    }
    /*----------------------------------------------------------------------------*/
    bool pop3Client::receivFromPop3(std::string& data)
    {
    unsigned length = 0;
    char buffer[0x0400] = {0};
    // получение
    std::string temp("");
    while( length != SOCKET_ERROR )
    {
    length = ::recv( _socket, buffer, 0x01ea, 0 );
    if ( length == 0 || length == SOCKET_ERROR)
    {
    return false;
    }
    // копирование принятых данных во временную строку
    std::copy(buffer, &buffer[length], std::back_inserter<std::string>(temp));
    if(length == 490 )
    {
    continue;
    }
    length = SOCKET_ERROR;
    }
    // возвращаемое значение
    data = temp;
    return true;
    }
    /*----------------------------------------------------------------------------*/
    bool pop3Client::sendToPop3(const std::string& data)
    {
    if(data.empty())
    {
    return false;
    }
    if(_socket == 0)
    {
    return false;
    }
    // отправка
    if(::send(_socket, data.c_str(), int(data.size()), 0) == SOCKET_ERROR )
    {
    // не удалось отправить
    return false;
    }
    // на всякий случай
    ::Sleep(500);
    return true;
    }
    /*----------------------------------------------------------------------------*/
    bool pop3Client::setAddress(const std::string& address)
    {
    if(::WSAStartup(MAKEWORD(1,1), &_rec))
    {
    return false;
    }
    if( address.empty())
    {
    return false;
    }
    _con.sin_addr.s_addr = ::inet_addr( address.c_str() );
    _con.sin_family = AF_INET;       //семейство протоколов
    _con.sin_port = ::htons(110);     //порт
    return true;
    }
    /*----------------------------------------------------------------------------*/
    bool pop3Client::hello()
    {
    if(_socket != 0)
    {
    ::closesocket(_socket);
    _socket = 0;
    }
    //создание сокета
    if( (_socket = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET )
    {
    return false;
    }
    // присоединение к серверу
    if(::connect(_socket, (struct sockaddr*)&_con, sizeof(_con)) == INVALID_SOCKET)
    {
    return false;
    }
    std::string data = "";
    // ожидание и проверка ответа
    if(receivFromPop3(data) == false)
    {
    return false;
    }
    if(checkError(data) == false)
    {
    return false;
    }
    // выделение timeStamp сервера
    std::string::size_type beg = data.find("<"), end = data.find(">", beg);
    if(beg == std::string::npos || end == std::string::npos)
    {
    return false;
    }
    _timeStamp = data.substr(beg , end - beg + 1);
    return true;
    }
    /*----------------------------------------------------------------------------*/
    void pop3Client::quit()
    {
    std::string quit = std::string("quit") + crlf_;
    if(!sendToPop3(quit))
    {
    return;
    }
    if(!receivFromPop3(quit))
    {
    return;
    }
    if(_socket != 0)
    {
    ::closesocket(_socket);
    _socket = 0;
    _timeStamp = "";
    }
    return;
    }
    /*----------------------------------------------------------------------------*/
    bool pop3Client::retr(unsigned messageNumber, std::string& message)
    {
    // проверка аргументов
    if(messageNumber == 0)
    {
    return false;
    }
    // формирование запроса серверу на пересылку сообщения
    std::stringstream sstream;
    sstream<<"retr "<<messageNumber<<crlf_;
    std::string retr = sstream.str();
    std::string data = "";
    if(!sendToPop3(retr))
    {
    return false;
    }
    do
    {
    if(!receivFromPop3(retr))
    {
    return false;
    }
    data += retr;
    } while( retr.find(".\xD\xA") == std::string::npos);
    // разбор прочитанной строки
    std::string::size_type beg = data.find("Return-Path: "),
    end = data.find_last_of(".");
    if(beg == std::string::npos || end == std::string::npos)
    {
    return false;
    }
    message = data.substr(beg, end - beg );
    return true;
    }
    /*----------------------------------------------------------------------------*/
    bool pop3Client::dele(unsigned messageNumber)
    {
    // формирование запроса
    std::stringstream sstream;
    sstream<<"dele "<< messageNumber;
    std::string dele = sstream.str() + crlf_;
    if(!sendToPop3(dele))
    {
    return false;
    }
    if(!receivFromPop3(dele))
    {
    return false;
    }
    return checkError(dele);
    }
    /*----------------------------------------------------------------------------*/
    bool pop3Client::apop(const std::string& user, const std::string& pass)
    {
    if(user.empty() || pass.empty())
    {
    return false;
    }
    // формирование хеша
    std::string toHash = _timeStamp + pass;
    unsigned char hash[16] = {0};
    // хэшируем
    md5_csum((unsigned char*)toHash.c_str(), (int)toHash.size(), hash);
    // приведение hash k hex представлению
    std::stringstream sstream;
    sstream<<std::hex<<std::nouppercase;
    for(unsigned int counter = 0; counter < 16; counter++)
    {
    sstream<<(long)hash[counter];
    }
    std::string apop = "apop " + user;
    // apop += " " + std::string((char*)hash);
    apop += " " + sstream.str();
    apop += crlf_;
    if(sendToPop3(apop) == false)
    {
    return false;
    }
    ::Sleep(1000);
    if(receivFromPop3(apop) == false)
    {
    return false;
    }
    return checkError(apop);
    }
    /*----------------------------------------------------------------------------*/
    bool pop3Client::stat(unsigned& messages)
    {
    std::string stat = std::string("stat") + crlf_;
    if(!sendToPop3(stat))
    {
    return false;
    }
    if(!receivFromPop3(stat))
    {
    return false;
    }
    if(!checkError(stat))
    {
    return false;
    }
    // разбор ответа
    std::string::size_type pos = stat.find_first_of(" ");
    if(pos == std::string::npos)
    {
    return false;
    }
    std::string::size_type end = stat.find(" ", pos + 1);
    std::stringstream sstream;
    // выделение подстоки
    sstream<<stat.substr(pos + 1, end - pos - 1);
    sstream>>messages;
    return true;
    }
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Так у тебя есть проект? Или только один *.cpp?

    Код (Text):
    #include <algorithm>
    #include <sstream>
    Это файлы стандартной библиотеки С++. По умолчанию они есть в Visual Studio. Попробуй там скомпилить
     
  3. Satell

    Satell Гость

    нету проекта, файл прикреплен с инклудами
    вижуал студио 2005 установил, но там тоже не знаю как компилить
     

    Вложения:

    • pop3.rar
      Размер файла:
      6,5 КБ
      Просмотров:
      42
  4. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Делаешь пустой проект, прикрепляешь к нему свои файлы. Заходишь в свойства проекта в раздел Linker\Input и в графе Additional Dependencies указываешь "WS2_32.lib" (без кавычек). Далее в меню Build выбираешь Build Solution
     
Загрузка...

Поделиться этой страницей