информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Программирование сокетов и вообще 20.06.01 19:43  Число просмотров: 1232
Автор: 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")
<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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach