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

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

Кодинг сокетов юзая winsock2 [D6, WinXP]


gfew ©   (2003-11-06 12:09:00) 

Все нижеприведенное юзается с winsock2.pas.
Прочитал мануалчик по кодингу сокетов, с кодингом прог-клиентов все понятно, но как быть с сервером? Последовательность действий такая: socket(args); listen(args); Так же в мануале сказано, что когда сервер получает запрос от клиента и принимает решение об установлении связи, он создает новый сокет и связывает его с ассоциацией, эквивалентной "слушающему сокету": <newsock>=accept(args); Как это понять и исполльзовать на практике? Что, так и писать:
s=socket(...);
listen(...);
s1=accept(...); ?
Куда запихать этот accept? Если можете, киньте маленькиц примерчик юзания accept"а


Polevi   (2003-11-06 13:17:00) [1]

>panov © (06.11.03 13:11) [7]
а что делает эта ф-ия по вашему ? почитай хелп и подумай зачем ее в цикле вызывать


panov   (2003-11-06 13:11:00) [2]

>Polevi © (06.11.03 12:38) [4]
>и снова Listen...
а вот этого не надо


Почему?


Polevi   (2003-11-06 13:02:00) [3]

Rouse_ © (06.11.03 12:51) [5]
к чему такая каша, как можно от гнезда ожидать и коннект и акцепт одновременно ? и read для ассept гнезда ни к чему..


Rouse_   (2003-11-06 12:51:00) [4]

Err := WSAAsyncSelect(FServer, FHandle, WM_ASYNC, FD_CONNECT or FD_ACCEPTor FD_READ);

И обрабатывать соответствующие сообщения...

Желаю успехов


Polevi   (2003-11-06 12:38:00) [5]

>panov © (06.11.03 12:27) [2]
>и снова Listen...
а вот этого не надо


Digitman   (2003-11-06 12:30:00) [6]

hListenSocket := socket(..);
bind(hListenSocket, ...); //!!!!!!!!!!!
listen(hListenSocket, ...);

while ServerActiveCondition = True do
begin
hNewClientAccotiatedSocket = accept(hListenSocket, ...); // новое соединение установлено ЗДЕСЬ
AddNewSocketToConnectionList(hNewClientAccotiatedSocket);
end;

for i=1 to ConnectionListCount do
CloseSocket(ConnectionList[i])

CloseSocket(hListenSocket);


panov   (2003-11-06 12:27:00) [7]

Посмотри вариант использования...

var
fEventObject: THandle;
...
begin

здесь Listen...

fEventObject := WSACreateEvent;
...
WSAEventSelect(fSocket, fEventObject, FD_ACCEPT)<>0 then
...
WaitForSingleObject(fEventObject,INFINITE);
...
fNewSocket := accept(fSocket,@fNewSA,@tSize);
...

и снова Listen...


Polevi   (2003-11-06 12:26:00) [8]

в цикл запихай


Наверх

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