информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Крупный взлом GoDaddy 
 Просроченный сертификат ломает... 
 Phrack #70/0x46 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Программирование сокетов и вообще 20.06.01 12:20  Число просмотров: 1406
Автор: myrmidon Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Я юзаю так - просто подключаю библиотеку wsock32.lib и всё, никаких #include не делаю
В крайнем случае подключи не winsock2.h, а winsock.h
<programming>
[C++] Программирование сокетов и вообще 20.06.01 02:42  
Автор: Vital Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Я подключаю к своему проекту <Winsock2.h>
почему Visual C++ 6.0 выдает ошибки:
prog.obj : error LNK2001: unresolved external symbol __imp__connect@12
prog.obj : error LNK2001: unresolved external symbol __imp__inet_addr@4
prog.obj : error LNK2001: unresolved external symbol __imp__socket@1
prog.obj : error LNK2001: unresolved external symbol __imp__WSAStartup@8
prog.obj : error LNK2001: unresolved external symbol __imp__gethostname@8
Release/prog.exe : fatal error LNK1120: 5 unresolved externals
Error executing link.exe.
Эти ошибки исчезают, если я включаю в поект файл Ws2_32.lib.
У меня с некоторыми функциями всегда такая фигня.
От чего это зависит? Что Visual просто не знает путь к нужной библиотеки?

Но это так, фигня, меня больше интересует программирование сокетов,
я стал этим заниматься и у меня возникли некоторые вопросы:

Я разбирался с кодом одной программы, отправляющей письмо на
почтовый сервер. Вот кусок кода из нее:

#define RECIEVE(code)\
{\
a = recv(s, sz1, sizeof(sz1), NULL);\
if (a == SOCKET_ERROR) goto goto_on_error;\
sz1[a] = 0;\
if (!strstr(sz1, code)) goto goto_on_error;\
}

#define SEND(data, datalen)\
{\
b = 0;\
while (b < datalen) {\
a = send(s, (char*) (data + b), datalen - b, NULL);\
if (a == SOCKET_ERROR) goto goto_on_error;\
b += a;\
};\
}

#define HOST_NAME "smtp.mail.ru"
#define HOST_PORT 25
#define SHORT_BUFFER_SIZE 0x100

char sz1[SHORT_BUFFER_SIZE], sz2[SHORT_BUFFER_SIZE];
WSADATA wsaData;
SOCKET s;
ULONG ulAddress;
HOSTENT *ptrHost;
SOCKADDR_IN sin;

// открыть сокет
s = socket(AF_INET, SOCK_STREAM, NULL);
if (s == INVALID_SOCKET) goto goto_on_error;

// получить данные о сервере
ulAddress = inet_addr(HOST_NAME);
if (ulAddress == INADDR_NONE) {
ptrHost = gethostbyname(HOST_NAME);
if (!ptrHost) goto goto_on_error;
memcpy(&sin.sin_addr, ptrHost->h_addr_list[0], sizeof(IN_ADDR));
} else {
memcpy(&sin.sin_addr, &ulAddress, 4);
};
sin.sin_family = AF_INET;
sin.sin_port = htons(HOST_PORT);

// установить соединение с сервером
if (connect(s, (PSOCKADDR)&sin, sizeof(SOCKADDR))) goto goto_on_error;
RECIEVE("220");

// отправить письмо
gethostname(sz2, sizeof(sz2));
sprintf(sz1, "HELO %s\r\n" ,sz2);
SEND(sz1, strlen(sz1)); // hello server
RECIEVE("250");
sprintf(sz1, "MAIL FROM:<%s>\r\n", MAIL_FROM);
SEND(sz1, strlen(sz1)); // mail from
RECIEVE("250");
sprintf(sz1, "RCPT TO:<%s>\r\n", MAIL_TO);
SEND(sz1, strlen(sz1)); // mail to
RECIEVE("25");
strcpy(sz1, "DATA\r\n");
SEND(sz1, strlen(sz1)); // data begin
RECIEVE("354");


Здесь мне непонятна фу-я макроса RECIEVE, что значат
RECIEVE("25"); RECIEVE("250"); и т.д. и зачем слать серверу
строку HELO: gethostname(sz2, sizeof(sz2));
sprintf(sz1, "HELO %s\r\n" ,sz2);
SEND(sz1, strlen(sz1)); // hello server

где бы можно было обо всем об этом почитать?
Я нашел только статью Танаева, но там все довольно поверхностно.
Где бы взять что-нибудь в стиле Рихтера?
Может кто знает хорошую лит-ру по программированию сокетов и
вообще по сетевому программированию.

Заранее благодарен.
Vital.
[C++] Программирование сокетов и вообще 20.06.01 12:20  
Автор: myrmidon Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Я юзаю так - просто подключаю библиотеку wsock32.lib и всё, никаких #include не делаю
В крайнем случае подключи не winsock2.h, а winsock.h
[C++] Программирование сокетов и вообще 20.06.01 03:48  
Автор: Бяша <Biasha> Статус: Member
<"чистая" ссылка>
> Я подключаю к своему проекту <Winsock2.h>
> почему Visual C++ 6.0 выдает ошибки:
> ...
> Эти ошибки исчезают, если я включаю в поект файл
> Ws2_32.lib.
> У меня с некоторыми функциями всегда такая фигня.
> От чего это зависит? Что Visual просто не знает путь к
> нужной библиотеки?

Он то знает, но стремится не включать в проект не нужные библиотеки.
А ошибка указанная тобой означает, что эта функция не найдена ни в одном из линкуемых файлов.
В мсдне про каждую функцию написано в какой она либе - если используешь функцию - должен дописать и либу в список либ.
(кстати очень удобно: в исходнике "#pragma comment(lib,"ws2_32.lib")" писать)


> Но это так, фигня, меня больше интересует программирование
> сокетов,
> я стал этим заниматься и у меня возникли некоторые вопросы:
>
> ...
> Здесь мне непонятна фу-я макроса RECIEVE, что значат
> RECIEVE("25"); RECIEVE("250"); и т.д. и зачем слать

Это значит сообщить об ошибке пользователю, если сервер вернул не 25, 250.

> серверу
> строку HELO: gethostname(sz2, sizeof(sz2));

Этого протокол SMTP требует. И твои проблемы никак с сокетами не связаны - учи SMTP.

>
> где бы можно было обо всем об этом почитать?
Про SMTP (Simple Mail Transfer Protocol) - RFC 821.

> Где бы взять что-нибудь в стиле Рихтера?
> Может кто знает хорошую лит-ру по программированию сокетов
> и
> вообще по сетевому программированию.

Присоединяюсь к вопросу - никогда не видел хорошую бумажную (или просто на русском и хорошую) книгу про сокеты.

>
> Заранее благодарен.
> Vital.
[C++] Программирование сокетов и вообще 20.06.01 11:46  
Автор: Vital Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Спасибо большое за помощь

> Он то знает, но стремится не включать в проект не нужные
> библиотеки.
> А ошибка указанная тобой означает, что эта функция не
> найдена ни в одном из линкуемых файлов.
> В мсдне про каждую функцию написано в какой она либе - если
> используешь функцию - должен дописать и либу в список либ.
> (кстати очень удобно: в исходнике "#pragma
> comment(lib,"ws2_32.lib")" писать)

Когда я включаю библиотеку выдается предупреждение?
LINK : warning LNK4089: all references to "WS2_32.dll" discarded by /OPT:REF



> > Здесь мне непонятна фу-я макроса RECIEVE, что значат
> > RECIEVE("25"); RECIEVE("250"); и т.д. и зачем
> слать
>
> Это значит сообщить об ошибке пользователю, если сервер
> вернул не 25, 250.
Это я понял, но что значат 25, 250. Это тоже специфика SMTP?

> > где бы можно было обо всем об этом почитать?
> Про SMTP (Simple Mail Transfer Protocol) - RFC 821.
А есть где нибудь в инете RFC 821 на русском или что-нибудь похожее по SMTP?

Спасибо
Vital
[C++] Программирование сокетов и вообще 20.06.01 18:53  
Автор: Бяша <Biasha> Статус: Member
Отредактировано 20.06.01 18:58  Количество правок: 1
<"чистая" ссылка>
> А есть где нибудь в инете RFC 821 на русском или что-нибудь
> похожее по SMTP?

www.icmm.ru/~masich/win/lexion/mail/smtp.html

Самому интересно, где есть RFC на русском :)

http://www.icmm.ru/~masich/win/lexion/mail/smtp.html
[C++] Программирование сокетов и вообще 20.06.01 17:42  
Автор: kabanchik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Когда я включаю библиотеку выдается предупреждение?
> LINK : warning LNK4089: all references to "WS2_32.dll"
> discarded by /OPT:REF
как ты его включаешь ?
это сообщение выдается, когда программа игнорирует все ехпортируемые ф-ии из длл-ки.
[C++] Программирование сокетов и вообще 20.06.01 19:43  
Автор: Vital Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Когда я включаю библиотеку выдается предупреждение?
> > LINK : warning LNK4089: all references to "WS2_32.dll"
> > discarded by /OPT:REF
> как ты его включаешь ?
> это сообщение выдается, когда программа игнорирует все
> ехпортируемые ф-ии из длл-ки.

Включаю так:
#include <Winsock2.h>
#include <ras.h>

#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"rasapi32.lib")
[C++] Программирование сокетов и вообще 21.06.01 01:10  
Автор: kabanchik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Включаю так:
> #include <Winsock2.h>
> #include <ras.h>
>
> #pragma comment(lib,"ws2_32.lib")
> #pragma comment(lib,"rasapi32.lib")

понятно, а в Settings-ах не включал?

или еще попробуй так :

#pragma comment(linker, "/NODEFAULTLIB:ws2_32.lib")
#pragma comment(lib, "ws2_32.lib")
[C++] Программирование сокетов и вообще 22.06.01 00:37  
Автор: Vital Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Включаю так:
> > #include <Winsock2.h>
> > #include <ras.h>
> >
> > #pragma comment(lib,"ws2_32.lib")
> > #pragma comment(lib,"rasapi32.lib")
>
> понятно, а в Settings-ах не включал?
>
> или еще попробуй так :
>
> #pragma comment(linker, "/NODEFAULTLIB:ws2_32.lib")
> #pragma comment(lib, "ws2_32.lib")

Не, так не работает, но вот когда я
включил ws2_32.lib в список библиотек в project->setting->link
все заработало.
А вообще, когда я писал просто
#pragma comment(lib, "ws2_32.lib")
при компиляции иногда выдавалось предупреждение, а иногда нет.
Чем это объяснить?
[Win32] [C++] Программирование сокетов и вообще 20.06.01 13:10  
Автор: АлексейШиршов Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> А есть где нибудь в инете RFC 821 на русском или что-нибудь
> похожее по SMTP?

Давай мыло!
У меня полная коллекция рфцшек! (36 Мг)
rfc 821 - 124 Кб в тексте
[Win32] [C++] Программирование сокетов и вообще 20.06.01 19:41  
Автор: Vital Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Давай мыло!
> У меня полная коллекция рфцшек! (36 Мг)
> rfc 821 - 124 Кб в тексте

Не мог бы ты прислать мне rfc821, rfc по FTP и rfc по pop3
e-mail: vitalh@yandex.ru
Спасибо
Vital
POP3, SMTP, FTP RFC's links 20.06.01 20:22  
Автор: Бяша <Biasha> Статус: Member
<"чистая" ссылка>
FTP:
http://www.networksorcery.com/enp/rfc/rfc959.txt

POP3:
http://www.networksorcery.com/enp/rfc/rfc1725.txt

SMTP:
http://www.networksorcery.com/enp/rfc/rfc821.txt
1






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2021 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach