Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | |
[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
|
|
|