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

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

ServerSocket :: What are differents? [D7, WinXP]


Страницы:   1 2

Alexey (AZ) ©   (2006-11-13 13:01:00) 

servertype - тип сервера. Может принимать одно из двух значений: stnonblocking - синхронная работа с клиентскими сокетами. При таком типе сервера Вы можете работать с клиентами через события onclientread и onclientwrite. stthreadblocking - асинхронный тип. Для каждого клиентского сокетного канала создается отдельный процесс (thread).
Добрый день. Сразу введу в курс дела. Нужен сервер, к которому могут только подключаться и отправлять инфу, отключением клиентов занимаюсь я. Есть идея сделать по таймеру так...
 for i:=1 to Serv.Socket.ActiveConnections do
   Memo1.Text := Serv.Socket.Connections[i-1].ReceiveText;

...и считывать с клиенов их послания так, а НЕ через событие ClientRead, затем отключать. Вопросы:
1) Будет ли накапливаться где-то инфа, если клиент отключится до того как я считаю (после дисконнекта я считать не смогу)?
2) Какой размер этого буфера?
3) СтОит ли копать в сторону stBlocking? Если да, то на что обратить внимание? (сейчас стоИт stNonBlocking)

Благодарю за внимание.


Сергей М.   (2006-11-13 15:21:00) [21]


> 2) Какой размер этого буфера?


см. ф-цию Winsock.GetSockOpt(), опция SO_RCVBUF


> 3) СтОит ли копать в сторону stBlocking?


Стоит, если транспортный тред не будет заниматься ничем иным, как только приемом/передачей


DVM   (2006-11-13 15:17:00) [22]

т.е. 1 и 0 наоборот


DVM   (2006-11-13 15:15:00) [23]


> Кроме (не)блокирующих есть еще синхронные/асинхронные,

я в курсе

> а в статье между ними поставлен знак равенства.

Я безотносительно статьи какой-то там. Я ее даже не глядел.

> Синхронный сокет совсем не обязан блокировать поток и наоборот.

Согласен, но я про синхронность/асинхронность даже не упоминал.

> Потоки сами по себе, а сокеты сами по себе.

А никто не говорит, что они как-то пересекаются.
Я имел ввиду, что функции работы с блокирующими сокетами блокируют вызывающий поток. Те же самые функции немедленно возвращают управление для сокетов находящихся в неблокирующем режиме.

Для меня блокирующий сокет это сокет для кторого выполнено
     Block := 1;
     ioctlsocket(Socket, FIONBIO, Block);
Неблокирующий:
      Block := 0;
      ioctlsocket(Socket, FIONBIO, Block);


Anatoly Podgoretsky   (2006-11-13 15:01:00) [24]

> DVM  (13.11.2006 14:08:05)  [5]

> Вторые программировать сложнее немного.
> Для сервера используют чаще блокирующие сокеты, помещая в потоки, для клиентов неблокирующие, хотя это как кому нравится.

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

Потоки сами по себе, а сокеты сами по себе.

--


DVM   (2006-11-13 14:08:00) [25]


> сокетного канала создается отдельный процесс (thread).

Может поток все-таки?

> 1) Будет ли накапливаться где-то инфа, если клиент отключится
> до того как я считаю (после дисконнекта я считать не смогу)?
>  

Где она будет накапливаться, сам копи ее, считывая в определенном событии.


> 2) Какой размер этого буфера?
Какой сделаешь, такой и будет.


> 3) СтОит ли копать в сторону stBlocking? Если да, то на
> что обратить внимание? (сейчас стоИт stNonBlocking)

Без разницы. Можно и так и так хорошо сделать.

> Т.е. я прошу объяснить различия между типами сокетов, и
> хочу узнать что для каких целей применять.

Между блокирующими и неблокирующими? Первые блокируют вызывающий поток во время операций с сокетом, вторые нет. Вторые программировать сложнее немного.
Для сервера используют чаще блокирующие сокеты, помещая в потоки, для клиентов неблокирующие, хотя это как кому нравится.


Anatoly Podgoretsky   (2006-11-13 13:55:00) [26]

> Alexey (AZ)  (13.11.2006 13:39:03)  [3]

Не, ну я на подобный источник не пойду, за здоровье опасаюсь.
Что значит нужно? и что значит лучше?
Это же задачей определяется.

--


Alexey (AZ)   (2006-11-13 13:39:00) [27]

Справка отсюда:
http://articles.org.ru/cfaq/index.php?qid=1891&frommostrecent=yes
Я честно говоря в некотором замешательстве... что из методов/событий/свойств этого сокета мне нужно использовать (т.е. что ЛУЧШЕ использовать, т.к. я уже два способа перепробовал).


Anatoly Podgoretsky   (2006-11-13 13:17:00) [28]

Ну во первых откуда такая справка, там все наоборот, а во вторых это тип работы сокета, с блокированием и не блокированием потоков, и больше ни чего.


Alexey (AZ)   (2006-11-13 13:10:00) [29]

Т.е. я прошу объяснить различия между типами сокетов, и хочу узнать что для каких целей применять.


Страницы:   1 2

Наверх

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