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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Первый раз работа по сети 
:(
    Опции темы
sunnmas
Дата 2.4.2011, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Имею Delphi 10Lite

Имеется платка, которая подсоединяется к компу по усб, эмулируя ком порт. Работать с ней умею. есть офис с несколькими компами, объединенных в локалку. Есть приложение, которое может использоваться с данной платкой. Сейчас если кто-то хочет поработать должен брать плату и подсоединять к своему компу. Так она кочует с компа на комп. Нужно сделать так, чтобы она была подключена к какому либо компу. На этом компе запущен сервер, к которому будут подключаться другие через tcp и работать с железом.

В этой версии дельфи есть компоненты TTCPServer/Client. Встречаю скудные примеры по работе с данными компонентами. Все они сводятся к тому, что в обработчике события OnAccept сервера читаем сообщение от клиента и шлем ему ответ, далее выход из обработчика - приводит к закрытию соединения. Нужно сделать как-то так чтобы после подключения клиента запускался цикл ожидания команд от клиента для платы и полученные команды отсылались ей, принимались данные от платы и обратно отправлялись ответы от нее клиентам(клиент использует те же команды, как если бы он общался через ком порт, только шлет и принимает их по сети). Серверу должен быть не важен характер данных для того чтобы можно было менять протокол оконечный софт - плата без затрагивания кода сервера в будущем. Он просто принимает, что прислал клиент и пишет в плату, читает ответ и передает назад. Обычно один сеанс связи клиент - плата состоит из множества команд обмена. Поэтому цикл сервера должен быть готов принимать множество пакетов и отсылать ответы платы обратно. Так же как то нужно прерывать этот цикл с помощью клиента. Например клиент делает дисконнект и сервер выходит из цикла, ожидая следующего подключения клиента - следующего сеанса, состоящего из множества команд. Так же выход из цикла по таймауту. Реально это замутить в обработчике OnAccept? Не могли бы вы набросать примерный вид этого обработчика. Надеюсь на посильную помощь. Спасибо
PM MAIL   Вверх
kami
Дата 2.4.2011, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

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



Попробуй воспользоваться моим примером (не сочти за саморекламу, но работа с "низкоуровневыми" сетевыми компонентами - достаточно нетривиальная задача).
PM MAIL WWW   Вверх
sunnmas
Дата 2.4.2011, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



далеко от моего вопроса. Но все равно спасибо
PM MAIL   Вверх
Akella
Дата 2.4.2011, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Цитата(sunnmas @  2.4.2011,  02:48 Найти цитируемый пост)
Имею Delphi 10Lite

шо это за хня? варез какой-то? здесь варез нельзя обсуждать.
PM MAIL   Вверх
sunnmas
Дата 2.4.2011, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Akella @ 2.4.2011,  17:06)
Цитата(sunnmas @  2.4.2011,  02:48 Найти цитируемый пост)
Имею Delphi 10Lite

шо это за хня? варез какой-то? здесь варез нельзя обсуждать.

на сколько мне известно это бесплатная студенческая версия порезанная. поэтому и юзаю ее, т.к. в офисе пописываю. Но вообще предыдущее высказывание не понятно мне. Да и не по теме
PM MAIL   Вверх
kami
Дата 2.4.2011, 21:46 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

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



Цитата(sunnmas @  2.4.2011,  13:41 Найти цитируемый пост)
далеко от моего вопроса.

Почему?
Я предлагаю воспользоваться для передачи по сети готовым решением, в котором учитываются многие проблемы, возникающие при использовании TCP. На "перворазном" этапе работы подобные "неявности" и "недоговоренности" приведут к неверному проектированию программы, заставят использовать ненужные костыли и так далее и тому подобное. Причем - на этапе тестирования, когда сервер и клиент расположены на одном компьютере, неучтенные проблемы однозначно не будут выявлены. А когда программа перейдет в стадию апробации на рабочих местах, начнут появляться всякие глюки, причину которых понять будет весьма непросто.
PM MAIL WWW   Вверх
Keeper89
Дата 2.4.2011, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

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



Цитата(sunnmas @  2.4.2011,  18:05 Найти цитируемый пост)
на сколько мне известно это бесплатная студенческая версия порезанная. поэтому и юзаю ее, т.к. в офисе пописываю. 

какая какая версия? =) тут она есть?

Это сообщение отредактировал(а) Keeper89 - 2.4.2011, 23:16


--------------------
PM MAIL WWW   Вверх
cat512
Дата 3.4.2011, 14:31 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Реально это замутить в обработчике OnAccept? Не могли бы вы набросать примерный вид этого обработчика

Во-первых, скажу что неплохо внимать советам которые дают на форуме опытные камрады. Всё, о чём писал kami, является действительно актуальным!. 
Во-вторых, если дейстыительно хочется изобретать велосипед, то проблемы тоже не вижу. Например, берём любую демку чата, из состава делфи 5-7, и смотрим как реализован обработчик OnAccept.


Это сообщение отредактировал(а) cat512 - 3.4.2011, 14:31
PM MAIL   Вверх
sunnmas
Дата 11.4.2011, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



прогресс вреде есть с компанентами инди 10.

Но и проблемы тоже имеются. 

Вот рабочий кусок кода (он в сокращении выложен. оставлены только ключевые моменты):

клиент:
   TcpCli:=TIdTCPClient.Create(nil);
  TcpCli.Port:=3006;
  TCPCli.ReadTimeout:=1000;
  TCPCli.UseNagle:=false;
...
    TCPCli.Host:=NOD;
    TcpCli.Connect;
    if not TcpCli.Connected then
    begin
      LOG.WriteString('  TcpCli not connected to server'+#13#10);
      exit;
    end;
...
 try
    TCPCli.IOHandler.WriteBufferOpen;
    TCPCli.IOHandler.Write(FWrBuf); -шлю 1 байт
    TCPCli.IOHandler.WriteBufferClose;
  except
    on E: EIdException do
    begin
      LOG.WriteString('WriteBuffer failed. exception: '+E.Message+#13#10);
      Result:=false;
    end
    else
    begin
      LOG.WriteString('WriteBuffer failed. Fuck, Shit!'+#13#10);
      Result:=false;
    end;
  end;

сервер
procedure TMainForm.IdTCPServerExecute(AContext: TIdContext);
var buf: array[0..100] of byte;
begin
  try
    with AContext.Connection do
    begin
      try
        Dongle.FWrBuf.Clear;
        try
          IOHandler.ReadStream(Dongle.FWrBuf,1); принимаю 1 байт
        except
        end;

        if Dongle.FWrBuf.Size>0 then
        begin
         //пишем данные в плату
          if not Dongle.WriteBuffer then
            exit;

        end;

      //читаем данные из платы
        Dongle.FRdBuf.Clear;
        Dongle.ReadBuffer;
        if Dongle.FRdBuf.Size>0 then
        begin
         //отправляем ответ от платы клиентской программе
          IOHandler.WriteBufferOpen;
          IOHandler.Write(Dongle.FRdBuf);
          IOHandler.WriteBufferClose;
          exit;
        end;

      except
      end;
    end;
  finally
  end;
end;

Вот так все работает


Но нужно двигаться дальше. Отсылать серваку не 1 байт, а произвольное их количество
Для этого на сервере изменяю так:
...
with AContext.Connection do
    begin
      try
        Dongle.FWrBuf.Clear;
       IOHandler.ReadTimeout(50);
        try
          IOHandler.ReadStream(Dongle.FWrBuf);
        except
        end;
...

ставлю на сервере usenagle=false

при этом IOHandler.ReadStream не зависает, но и не принимает никаких данных (от клиента все так же шлю пока 1 байт)


Недогоняю пока в чем проблема. Подскажите?
PM MAIL   Вверх
sunnmas
Дата 11.4.2011, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Кстати при использовании TIdLOGFile

у клиента:
Sent 12.04.2011 0:24:31: 

у сервера:
Recv 12.04.2011 0:24:31: 


там после двоеточия дет квадратик(типо неотображаемый символ я полагаю)

По сему на сервер данные поступают, но в поток Dongle.FWrBuf этот байт не записывается!

как быть?
PM MAIL   Вверх
Akella
Дата 14.4.2011, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



sunnmas, а что, кнопку КОД не судьба использовать? 
http://forum.vingrad.ru/forum/topic-126445.html

Добавлено через 3 минуты и 21 секунду
Цитата(sunnmas @  11.4.2011,  22:55 Найти цитируемый пост)
Отсылать серваку не 1 байт, а произвольное их количество

нужно ведь как-то серверу сообщить, сколько ты байт отправляешь?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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