Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Какой компилятор использовать? (https://forum.antichat.xyz/showthread.php?t=43914)

Satell 07.07.2007 10:05

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


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

Код:

#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;
}


_Great_ 07.07.2007 11:32

Цитата:

VC++ не ставится,
что пишет?
Цитата:

Borland c++ Builder поставил, но там непонятно куда его вставлять...
читай хелп

Satell 07.07.2007 11:34

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
и не понятно что выбирать, какой проджект делать, выбираю консольное приложение

_Great_ 07.07.2007 11:41

ты выложил только 1 исходный файл из нескольких, трудно сказать, акакой прожект делать.
с борландом я не знаком.. а что пишет Visual C++ ? он 100% должен собрать.
gcc тоже должен собрать.

Ni0x 07.07.2007 12:46

Цитата:

Borland c++ Builder поставил, но там непонятно куда его вставлять...
обычный cpp файл создай

Satell 07.07.2007 13:05

установил вижуал студио 2005
вот исходник с инклудами, только он не в виде проекта, как его в студию запихать и скомпилить?
http://satellat.tripod.com/pop3.rar

Ky3bMu4 07.07.2007 13:09

Делай эмпти прожект, pop3.cpp переименуй в main.cpp, и все файлы из архива кидай в папку с прожектом(ТвоиДокументы\Visu al Studio 2005\Projects\ИмяПрожекта\ИмяПро екта)

_Great_ 07.07.2007 13:16

Ky3bMu4 не путай людей, не надо ничего переименовывать. И кидать ничего никуда не надо.
Просто создать консольный пустой проект и добавить в него эти файлы в IDE из их обычного местонахождения. Потом нажать Ctrl-Shift-B

Цитата:

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


Время: 16:36