Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Простенький TCP-сервер  (Прочитано 13184 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Смоляное Чучелко
Гость
« : 18-11-2003 04:41 » 

Народ, ткните носом чайника, плз...

Задумал создать простенький клиент-сервер. На TCP/IP.

Делаю форму. Кидаю на неё TTCPServer. Ему в OnAccept пишу

procedure TMain.MainServerAccept(Sender: TObject;
  ClientSocket: TCustomIpClient);
begin
  TAtomServer.Create (ClientSocket);
end;

Здесь TAtomServer -- это мой класс (упрощённо):

  TAtomServer = class (TThread)
   Socket: TCustomIpClient;
   constructor Create (Client: TCustomIpClient);
   procedure Execute; override;
  end;

constructor TAtomServer.Create (Client: TCustomIpClient);
begin
  Socket := Client;
  inherited Create (false);
end;

И далее -- в TAtomServer.Execute обработка. То бишь, я надеялся туда сунуть обработку. Ибо, похоже, при любом действии с Socket программа вываливается... Даже пробовал в Synchronize совать -- бесполезно.

С уважением -- Смоляное Чучелко
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #1 : 18-11-2003 05:32 » 

Вот те раз:
Specifies whether each connection accepted by the server socket is non-blocking, or if it is automatically given a separate execution thread.

type TServerType = (stNonBlocking, stThreadBlocking);
property ServerType: TServerType;

Description

Set ServerType to stThreadBlocking to automatically spawn a new thread for each socket connection accepted by the server socket. When ServerType is stThreadBlocking, the execution of the connection thread is suspended while reading or writing until all information has been transferred over the connection. The thread for each connection generates OnClientRead or OnClientWrite events when the server socket needs to read or write.

Set ServerType to stNonBlocking to handle all reading and writing over the socket connections asynchronously. When ServerType is stNonBlocking, all client connections are handled in a single execution thread by default. OnClientRead or OnClientWrite events occur when the client socket on the other end of one of the connections tries to send or receive information over the connection.

Use a non-blocking socket when the socket needs to synchronize reading and writing with client sockets.

Note:   When ServerType is stThreadBlocking, it is important that the OnClient... event handlers contain thread-safe code.

Написано мо если поставить правильный флаг то он сам создаст нужный поток для чтения и записи вызывающийся при OnClientRead и OnClientWrite
К слову проверил твой код нет там ошибот всё запустилось. Проверь есть ли обращения из потока к форме.
Записан

Странно всё это....
Anonymous
Гость
« Ответ #2 : 24-11-2003 23:36 » new

Цитата: LogRus
Вот те раз:


Про это-то я читал, но спасибо за подсказку -- нашёл ещё и это место, да и по текстам -- маленько разобрался. Через OnGetThread маленько заработало. На одном-двух клиентах.

Однако, всё равно неясно. Оный OnGetThread вызывается не при создании нити, а при создании новой нити. Старые помещаются в кэш и просто ресумятся. И как мне, многогрешному, получить сокет??? Пробую через Synchronize -- запускаются почему-то две нити, первая соединяется, вторая чего-то ждёт. Как-то надо исполнить команду в другой нити...

Впрочем, интерес, пожалуй, чисто теоретический -- не нравится мне идея заводить две сотни нитей, на каждого клиента... Всё равно буду пробовать один поток на обработку.

Цитата: LogRus
К слову проверил твой код нет там ошибот всё запустилось. Проверь есть ли обращения из потока к форме.


Да ты, типа, кудесник? Не может этот код работать, ну, не может, и всё!

С уважением -- Смоляное Чучелко
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines