Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OnRecv и прочее... [D6, D7, NT4, Win2k, WinXP]


доброжелатель ©   (2004-08-20 20:47:00) 

Добрый всем вечер.
Я решил не прибегать к помощи чужих нароботок и не использовать чужие компоненты и библиотеки, заодно немного повысить свои познания в области winsock.
Накатал такой интересный код (сейчас может и не работать, писал не память). Который прекрасно работает.

Если я этот весь код запихиваю в собственный класс и уже с ним провожу "испытания".
Но меня заинересовал один момент... Как в "чужих наработках", "генерятся": property onconnect, property ondisconnect, property onerror, property onrecv? (названия придуманы, но думаю смысл понятен)
Если первые три (property onconnect, property ondisconnect, property onerror) я немного представляю, как делается, но вот как с onrecvу меня воображения не хватает, как это сделать.

Не могли бы вы с нижележащим кодом (или аналогичным по сложности) в классе, "генерить" property onconnect, property ondisconnect, property onerror, property onrecvну или если слишком накладно, только property onrecv.
И ещё, не предлагайте "подсмотреть" нужное мне в чужих компонентах и библиотеках. На сегодняшний день мне проблематично изучить из-за нехватки времени и тем, что там всё слишком "накручено" и для моего слишком простого класса не понятно.  


var
  sWsd :WSAData;
  sClient : TSOCKET;
  sServ : sockaddr_in;
  sBuffer : array [0..1024] of char;
begin
  sBuffer := 'GET / HTTP/1.0'+#13#10#13#10;
  WsaStartup (MAKEWORD (2,2), sWsd);

  sClient := socket (AF_INET, SOCK_STREAM,  IPPROTO_IP);

  ZeroMemory(@sServ, SizeOf(sServ));
  sServ.sin_family := AF_INET;
  sServ.sin_addr := in_addr (inet_addr('127.0.0.1'));
  sServ.sin_port := htons(80);

if connect(sClient, sServ, SizeOf(sServ)) <> SOCKET_ERROR then begin
if send (sClient,sBuffer, strlen (sBuffer), 0) <> SOCKET_ERROR then begin
while recv (sClient, sBuffer, 1024, 0) <> 0 do begin
Application.ProcessMessages;
ZeroMemory (@sBuffer, Length (sBuffer));
end;
end;
end;

 closesocket (sClient);
 WSACleanup;
end;


Очень надеюсь на ваше понимание и помощь! Любое инфо подкрепите простеньким примером, если не сложно.
:)


Digitman   (2004-08-23 08:38:00) [1]


> доброжелатель   (21.08.04 18:37) [2]


> Получается помощи ждать не стоит


"Спасение утопающих - дело рук самих утопающих"(с)


> примера я точно не получу?


загляни в scktcomp.pas, там ты найдешь пример


> можно без примера обьяснить?


http://book.itep.ru

см. раздел "Winsock"


доброжелатель   (2004-08-21 18:37:00) [2]

Verg
Получается помощи ждать не стоит. Но уж примера я точно не получу? Тогда может можно без примера обьяснить?

А вообщето в жизни гораздо больше противоречий в отличие от моего скромного класса...


Verg   (2004-08-21 11:59:00) [3]


> Любое инфо подкрепите простеньким примером, если не сложно.


А разве это и не будет "посмотреть чужие компоненты и библиотеки"?

Как-то слишком много всяких противоречивых условий на которых вы соизволили бы принять нашу скромную помощь, в оказании которой вам все мы очень нуждаемся.
Вдруг наши простенькие примеры покажутся вам слишком нарученными и непонятными для вашего "слишком простого класса".... Не дай-то Бог....


Наверх

Титульная страница Поиск, карта сайта Написать письмо