Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> winsockets 
:(
    Опции темы
CWD
Дата 26.1.2013, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 26.11.2011

Репутация: нет
Всего: нет



Добрый день, возникло желание написать программу на с++ которая сможет заходить на свой почтовый ящик. Вот попробовал реализовать вообще так сказать "переговоры" с сервером. Ничего не получилось, как только пытаюсь получить ответ(стереть комментарий) программа зависает.

Код

#include <winsock.h>
#include <iostream>
SOCKET s; 


bool ConnectToHost(int PortNo, char* IPAddress)
{

    WSADATA wsadata;
    int error = WSAStartup(0x0202, &wsadata);
    if (error)
        return false;
    if (wsadata.wVersion != 0x0202)
    {
        WSACleanup();
        std::cout << ("Error");
        return false;
    }
    SOCKADDR_IN target; 
    target.sin_family = AF_INET; 
    target.sin_port = htons (PortNo); 
    target.sin_addr.s_addr = inet_addr (IPAddress); 

    s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (s == INVALID_SOCKET)
    {
        std::cout << ("Couldn't create the socket");
        return false;
    }  

    if (connect(s, (SOCKADDR *)&target, sizeof(target)) == SOCKET_ERROR)
    {
        std::cout << ("Could not connect");
        return false; 
    }
    else
    {
        std::cout << ("Success");
        return true; 
    }
}


void CloseConnection ()
{
    if (s)
        closesocket(s);
    
    WSACleanup(); 
    std::cout << ("Closed");
}
int main()
{
    char buffer[80];
    memset(buffer, 0, sizeof(buffer));
    ConnectToHost(12350,"127.0.0.1");
    //recv(s,buffer,sizeof(buffer)-1,0);
    CloseConnection();
    system ("Pause");
    return 0;
}


Это сообщение отредактировал(а) CWD - 26.1.2013, 16:34
PM MAIL   Вверх
Олег2005
Дата 26.1.2013, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



А серверу после коннекта - ничего не надо посылать?
Как он узнает - что клиенту надо?
Протокол общения с сервером - какой?
PM MAIL WWW MSN   Вверх
CWD
Дата 26.1.2013, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 26.11.2011

Репутация: нет
Всего: нет



Олег2005, Протокол общения SMTP. Ну да, наверное что-то нужно отправлять пароль и логин, но в каком формате?
PM MAIL   Вверх
feodorv
Дата 26.1.2013, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(CWD @  26.1.2013,  17:56 Найти цитируемый пост)
Протокол общения SMTP.

Вы уверены? SMTP обычно, всё же, используется для отправки почты. А вот для получения почты применяют pop3, imap etc.


Цитата(CWD @  26.1.2013,  17:34 Найти цитируемый пост)
    ConnectToHost(12350,"127.0.0.1");

Порт правильный? Вы на него telnet'ом заходили?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
CWD
Дата 26.1.2013, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 26.11.2011

Репутация: нет
Всего: нет



feodorv, Ну я просто тестировал этот код на localhoste своего компа. Вообще в идеале хотелось бы реализовать SMTP клиент, который смог бы логинится на свой почтовый ящик. Найти пример мне что-то не удалось.

Это сообщение отредактировал(а) CWD - 26.1.2013, 19:47
PM MAIL   Вверх
feodorv
Дата 27.1.2013, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(CWD @  26.1.2013,  18:59 Найти цитируемый пост)
я просто тестировал этот код на localhoste своего компа

А что висит на локальном компьютере на 12350 порту?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
CWD
Дата 27.1.2013, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 26.11.2011

Репутация: нет
Всего: нет



Зарегистрировал почтовый ящик на mail.ru. Зашел телнетом, вроде работает.
220 smtp52.i.mail.ru ESMTP ready
EHLO mail
250-smtp52.i.mail.ru
250-SIZE 73400320
250-8BITMIME
250-AUTH PLAIN LOGIN
250 STARTTLS
AUTH LOGIN
334 VXNlcm5hbWU6

Попробовал реализовать подобное программой 
Код

int main()
{
    char buffer[256];
    char buffer1[256];

    memset(buffer, 0, sizeof(buffer));
    memset(buffer1,0,sizeof(buffer));
    ConnectToHost(25,"94.100.177.1");
    
    send(s,"EHLO mail",sizeof("EHLO mail")-1,0);
    recv(s,buffer,sizeof(buffer)-1,0);
    printf(buffer);

    send(s,"AUTH LOGIN",sizeof("AUTH LOGIN")-1,0);
    recv(s,buffer1,sizeof(buffer1)-1,0);
    printf(buffer1);

    CloseConnection();
    system ("Pause");
    return 0;
}


Выдает 220 smtp52.i.mail.ru ESMTP ready и зависает.

PM MAIL   Вверх
feodorv
Дата 27.1.2013, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(CWD @  27.1.2013,  16:25 Найти цитируемый пост)
    send(s,"EHLO mail",sizeof("EHLO mail")-1,0);

Нужен символ перевода строки '\n' в самом конце передаваемой строки, иначе сервер считает, что команда не введена до конца, и ждёт её окончания...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Zmaster555
Дата 27.1.2013, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 14.1.2013

Репутация: нет
Всего: нет



Цитата

Каждая командная строка заканчивается символами CRLF.


Т.е. в конце каждой строки нужен "\r\n";
PM MAIL   Вверх
CWD
Дата 27.1.2013, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 26.11.2011

Репутация: нет
Всего: нет



Zmaster555, 
feodorv, Спасибо! Работает полноценно! А можете подсказать, каким образом можно модифицировать программу что бы она заходила на почту, только через proxy.
PM MAIL   Вверх
feodorv
Дата 28.1.2013, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Если имеется в виду socks5 прокси, то нужно изучить соответствующий протокол... И поискать в сети примеры программ... Например...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.