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

  • Автор темы Satell
  • Дата начала
S

Satell

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

Код:
#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;
}
 
04.09.2006
2 566
3
#2
Так у тебя есть проект? Или только один *.cpp?

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

Satell

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

Вложения

  • 6.5 КБ Просмотры: 42
04.09.2006
2 566
3
#4
Делаешь пустой проект, прикрепляешь к нему свои файлы. Заходишь в свойства проекта в раздел Linker\Input и в графе Additional Dependencies указываешь "WS2_32.lib" (без кавычек). Далее в меню Build выбираешь Build Solution