Форум: "Сети";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];
ВнизПомогите разобрать пример, пожалуйста Найти похожие ветки
← →
Бамбук (2002-08-06 22:13) [0]
procedure TMainForm.FormCreate(Sender: TObject);
var Init:TWSAData;
SockOpt:BOOL;
Sock:TSocket;
Target:TSockAddrIn;
begin
WSAStartup($101,Init);
Sock:=Socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
SockOpt:=TRUE;
SetSockOpt(Sock,SOL_SOCKET,SO_BROADCAST,PChar(@SockOpt),SizeOf(SockOpt)) ;
Target.sin_port:=htons(8167);//номер порта
Target.sin_addr.S_addr:=INADDR_BROADCAST;
Target.sa_family:=AF_INET;
SendTo(Sock,Data,DataBytes,0,Target,SizeOf(Target));
WSACleanup;
end;
Плиз, к хелпах не отсылайте.
1) WSAStartup($101,Init); - что за $101 ?
2)SetSockOpt(Sock,SOL_SOCKET, SO_BROADCAST,PChar(@SockOpt),SizeOf(SockOpt)) ;
...
Target.sin_addr.S_addr:= INADDR_BROADCAST;
Зачем столько упоминаний, что это броадкаст ? Одного раза недостаточно ?
← →
DiamondShark (2002-08-06 22:51) [1]
> 1) WSAStartup($101,Init); - что за $101 ?
Требуемая версия WinSock. В данном случае 1.1
> 2) SetSockOpt(Sock,SOL_SOCKET,SO_BROADCAST,PChar(@SockOpt),SizeOf(SockOpt))
> ;
> ...
> Target.sin_addr.S_addr:=INADDR_BROADCAST;
>
> Зачем столько упоминаний, что это броадкаст ? Одного раза
> недостаточно ?
Затем, что это разные вещи.
Первое упоминание -- разрешение передачи через этот сокет широковещательных сообщений
Второе упоминание -- специальный адрес, означающий "Всем! Всем! Всем! Говорит Москва!"
← →
Бамбук (2002-08-06 23:54) [2]Ясно ! Спасибо огромное !
Остались еще вопросы.
Что такое Init вWSAStartup($101, Init);
?
LPWSADATA lpWSAData - а откуда взялось Init ?
Также не нашел, что такое PF_INET вSock:=Socket( PF_INET,SOCK_DGRAM,IPPROTO_UDP);
А также, что такое SOL_SOCKET вSetSockOpt(Sock, SOL_SOCKET,SO_BROADCAST,PChar(@SockOpt),SizeOf
(SockOpt)) ;
← →
Digitman (2002-08-07 09:05) [3]lpWSAData - имя формального параметра типа LPWSADATA в декларации ф-ции
Init - имя переменной - фактического параметра того же типа, которую ты обязан объявить перед вызовом ф-ции
Например,
var Init: WSAData;
Константа PF_INET (Protocol Family) - в дан.случае то же самое, что и AF_INET (Address Family)
SOL_SOCKET - константа, определяющая одно из допустимых значение параметра level в ф-ции управления опциями гнезда
[in] The level at which the option is defined; the supported levels include SOL_SOCKET and IPPROTO_TCP. (See annex for more protocol-specific levels.)
← →
Бамбук (2002-08-07 23:44) [4]Непонятно вот что Зачем объявлять, передавать Init в
WSAStartup($101,Init);
если потом эта Init нигде не используется ?
← →
Digitman (2002-08-08 08:56) [5]Если Init не используется в TCustomWinSocket, это еще не значит, что информация, возвращаемая в переменную Init, не имеет никакого практ.смысла. А информация эта (возвращаемая безусловно), например, может сказать тебе о реально установленной версии Winsock в случае затребования тобой версии, выше установленной.
В дан. случае ты требуешь v1.1, поэтому Winsock не даст отказ при инициализации. Если же ты, к примеру, затребуешь v3.x ($300), то ф-ция WSAStartup (инициализация сессии) даст отказ, а содержимое Init покажет макс.версию, которую допустимо было требовать при инициализации сессии (скорее всего это будет v2.2, не выше)
← →
Бамбук (2002-08-09 19:20) [6]А где вообше можно почитать по русски доступно про программирование сокетов в чистом API ?
← →
Digitman (2002-08-12 08:20) [7]http://books.itep.ru
← →
Бамбук (2002-08-12 22:53) [8]Такого сайта не существует
← →
Digitman (2002-08-13 08:47) [9]Извини, чуть исказил, вот верная ссылка :
http://book.itep.ru
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c