Какой компилятор использовать?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Satell, 7 Jul 2007.

  1. Satell

    Satell Elder - Старейшина

    Joined:
    13 Jan 2007
    Messages:
    91
    Likes Received:
    5
    Reputations:
    1
    На чём компилировать?


    Вот этот код, VC++ не ставится, Borland c++ Builder поставил, но там непонятно куда его вставлять...

    Code:
    #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. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    что пишет?
    читай хелп
     
  3. Satell

    Satell Elder - Старейшина

    Joined:
    13 Jan 2007
    Messages:
    91
    Likes Received:
    5
    Reputations:
    1
    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
    и не понятно что выбирать, какой проджект делать, выбираю консольное приложение
     
  4. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    ты выложил только 1 исходный файл из нескольких, трудно сказать, акакой прожект делать.
    с борландом я не знаком.. а что пишет Visual C++ ? он 100% должен собрать.
    gcc тоже должен собрать.
     
  5. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    обычный cpp файл создай
     
  6. Satell

    Satell Elder - Старейшина

    Joined:
    13 Jan 2007
    Messages:
    91
    Likes Received:
    5
    Reputations:
    1
    установил вижуал студио 2005
    вот исходник с инклудами, только он не в виде проекта, как его в студию запихать и скомпилить?
    http://satellat.tripod.com/pop3.rar
     
  7. Ky3bMu4

    Ky3bMu4 Elder - Старейшина

    Joined:
    3 Feb 2007
    Messages:
    487
    Likes Received:
    284
    Reputations:
    42
    Делай эмпти прожект, pop3.cpp переименуй в main.cpp, и все файлы из архива кидай в папку с прожектом(ТвоиДокументы\Visual Studio 2005\Projects\ИмяПрожекта\ИмяПрожекта)
     
    1 person likes this.
  8. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Ky3bMu4 не путай людей, не надо ничего переименовывать. И кидать ничего никуда не надо.
    Просто создать консольный пустой проект и добавить в него эти файлы в IDE из их обычного местонахождения. Потом нажать Ctrl-Shift-B

    Нашёл, что поставить, блин.. гавно же