Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите пожалуйста принцип работы написания, серверного приложения (не знаю правильно 
:(
    Опции темы
Zmeyka
Дата 2.5.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.5.2006

Репутация: нет
Всего: нет



Не знаю как правильно будет сказать, но может быть подскажете принцип организации серверного сокета? Уже неделю мучаюсь никак не запустить сокет на прослушивание...


До чего дошел... не знаю правильно или нет, но всеже...

1) Инициализация WSAStartUp..

2) Создаю сокет
(Socket1:TSocket   SockAddr:TSockAddr;)

Socket1:=Socket(Internet,Stream,0);
FillChar(SockAddr,SizeOf(SockAddr),0);
SockAddr.Sin_Family:=Internet;
SockAddr.Sin_Port:=Htons(80);


3) Вроде как прослушиваю сокет (точнее пытаюсь)
(Pr,Pr1:Integer)

Pr:=Bind(Socket1,SockAddr,SizeOf(SockAddr));
Pr1:=Listen(Socket1,1);

До этого момента по крайней мере ошибок не выдает...

4) Далее как я понял надо использовать функцию Accept
И пробую это делать:

Pr3:=Accept(Server,Nil,nil);

Вот с фуекцией Accept Самые непонятки... как я понял из примеров, второй параметр функции Accept это переменная Record типа TSockAddr и там должны отображаться данные клиента если есть соединение..., но сколько не бился, так и не смог задать эту переменную... дельфя все рукагется о несоответствии типов.

Может кто подскажет убогому, правильную последовательность действий при создании серверного сокета и в какие функции и какие даные передавать?

Кроме всего прочего никак не пойму: Каким образом сокет постоянно висит на прослушивании? Он же 1 раз запускается и вырубается через какое то время? 
Пробовал зацикливать, но тогды приложение виснет черзе некоторое время...

 
PM MAIL   Вверх
Romikgy
Дата 2.5.2006, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



1. запускаешь листен, и ты должен как то среагировать на само подключение , если оно произошло только тогда вызывать нужно
Цитата(Zmeyka @  2.5.2006,  18:57 Найти цитируемый пост)
Pr3:=Accept(Server,Nil,nil);

Код

The Windows Sockets listen function establishes a socket to listen for an incoming connection.

int listen (

    SOCKET s,    
    int backlog    
   );    
 

Parameters

s

[in] A descriptor identifying a bound, unconnected socket.

backlog

[in] The maximum length to which the queue of pending connections can GROW. If this value is SOMAXCONN, then the underlying service provider responsible for socket s will set the backlog to a maximum "reasonable" value.


Цитата(Zmeyka @  2.5.2006,  18:57 Найти цитируемый пост)
Он же 1 раз запускается и вырубается через какое то время? 


Цитата(Zmeyka @  2.5.2006,  18:57 Найти цитируемый пост)
Listen(Socket1,1);

после первого же подключения у тя очередь заканчивается.

Цитата(Zmeyka @  2.5.2006,  18:57 Найти цитируемый пост)
Pr3:=Accept(Server,Nil,nil);

Вот с фуекцией Accept Самые непонятки... как я понял из примеров, второй параметр функции Accept это переменная Record типа TSockAddr и там должны отображаться данные клиента если есть соединение..., но сколько не бился, так и не смог задать эту переменную... дельфя все рукагется о несоответствии типов.

эти параметры заполняет система, в них надо указать место куда писать , если  там нил ,значит те эти данные не надо 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Zmeyka
Дата 3.5.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.5.2006

Репутация: нет
Всего: нет



не понял... можно еще раз?

WSAStartUp($101,WSAData)=0;
Socket1:=Socket(2,1,0);
SockAddr.Sin_Family:=2;
SockAddr.Sin_Port:=80;
Pr1:=Bind(Socket1,SockAddr,SizeOf(SockAddr));
Pr2:=Listen(Socket1,1);

>>1. запускаешь листен, и ты должен как то среагировать на само >>подключение , если оно произошло только тогда вызывать нужно >>Accept.

Дык никакого подключения-то не происходит...
Bind и Listen всегда выдают -1, пробую зациклить эти Bind и Listen и приложение виснет.
Или с Локалхоста оно не подконектиться к этому сокету?

 
PM MAIL   Вверх
Zmeyka
Дата 3.5.2006, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.5.2006

Репутация: нет
Всего: нет



Мде... не знаю почему но заработало.... по крайней мере коннект появился... извиняюсь за беспокойство. Сенк за помощь.

 
PM MAIL   Вверх
Romikgy
Дата 3.5.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(Zmeyka @  3.5.2006,  17:43 Найти цитируемый пост)
Bind и Listen всегда выдают -1

Код

If no error occurs, bind returns zero. Otherwise, it returns SOCKET_ERROR, and a specific error code can be retrieved by calling WSAGetLastError.

Цитата(Zmeyka @  3.5.2006,  21:04 Найти цитируемый пост)
 Сенк за помощь.

Пжалста smile 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.