информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsВсе любят медАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Программирование сокетов и вообще 20.06.01 02:42  Число просмотров: 2228
Автор: 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.
<programming> Поиск 






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


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach