На чём компилировать? Вот этот код, 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; }
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 и не понятно что выбирать, какой проджект делать, выбираю консольное приложение
ты выложил только 1 исходный файл из нескольких, трудно сказать, акакой прожект делать. с борландом я не знаком.. а что пишет Visual C++ ? он 100% должен собрать. gcc тоже должен собрать.
установил вижуал студио 2005 вот исходник с инклудами, только он не в виде проекта, как его в студию запихать и скомпилить? http://satellat.tripod.com/pop3.rar
Делай эмпти прожект, pop3.cpp переименуй в main.cpp, и все файлы из архива кидай в папку с прожектом(ТвоиДокументы\Visual Studio 2005\Projects\ИмяПрожекта\ИмяПрожекта)
Ky3bMu4 не путай людей, не надо ничего переименовывать. И кидать ничего никуда не надо. Просто создать консольный пустой проект и добавить в него эти файлы в IDE из их обычного местонахождения. Потом нажать Ctrl-Shift-B Нашёл, что поставить, блин.. гавно же