Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.04.2009, 21:53
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию Indy примитивный клиент и сервер

Существует статья: http://www.glscene.ru/content.php?article.24 . Там описано создание клиента и сервера в Delphi с помощью Indy. Впринципе делаю всё как там написано. В итоге создал два .exe; один клиент, другой сервер. Пытаюсь подключить клиент к серверу (оба приложения находятся на одной рабочей станции). Почему-то клиент не подключается ! Я думаю всё дело в том, что я неправильно указал IP сервера у клиента.

Из вышесказанного вытекает вопрос, как узнать IP машины? Сам по себе вопрос несложный. Я использовал для его решения это: http://www.delphisources.ru/pages/fa...et_own_ip.html . Функция, описанная там выводит мне IP. Но когда я вставляю его в свойство Host клиента, затем пытаюсь подключиться, у меня это не получается ... Помогите кто чем может.
__________________
Делаем'c разные игры. Искать на glscene.ru
Ответить с цитированием
  #2  
Старый 22.04.2009, 22:17
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А если попробовать 127.0.0.1?
Ну и в OnConnect сервера вставь какое-нить логирование - вообще хоть что-то подсоединяется. Можно для начала попробовать подключиться к серверу через telnet - проверить сам сервер.
Ответить с цитированием
  #3  
Старый 23.04.2009, 18:44
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

Цитата:
Сообщение от lmikle
А если попробовать 127.0.0.1?
, то ничего не изменится.

Цитата:
Сообщение от lmikle
Ну и в OnConnect сервера вставь какое-нить логирование - вообще хоть что-то подсоединяется.
Что значит логирование?

Цитата:
Сообщение от lmikle
Можно для начала попробовать подключиться к серверу через telnet - проверить сам сервер.
Ну нет. Мне и так страшно смотреть на тысячу компонентов с префиксом Id.

Вобщем присылаю исходник сервера и клиента, вес файла 394kb: http://ifolder.ru/11774893
__________________
Делаем'c разные игры. Искать на glscene.ru

Последний раз редактировалось DungeonLords, 23.04.2009 в 19:00.
Ответить с цитированием
  #4  
Старый 23.04.2009, 19:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

telnet - эо специальная программка в винде. Когда писал свой почтовый сервис, тестировал именно с помощью ее. Благо почтовые протоколы достаточно простые.

Логирование - вывод какой-нить строчки текста в файл/мемо/и т.д. из соответсуующих событий.

Ну и зачем такой большой файл? Убери из него бинарники - все-равно пересобирать для теста. А еще проще - можно выложить сразу сюда важные куски кода. Например, установка параметров клиента и открытие соединения и Установка параметров сервера и открытие порта на прослушивание.
Ответить с цитированием
  #5  
Старый 23.04.2009, 19:05
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

Цитата:
Сообщение от lmikle
Ну и зачем такой большой файл? Убери из него бинарники - все-равно пересобирать для теста. А еще проще - можно выложить сразу сюда важные куски кода. Например, установка параметров клиента и открытие соединения и Установка параметров сервера и открытие порта на прослушивание.
Ну там код по статье, поэтому я незнаю, что мне выкладывать ибо всё приведено к такому же виду, как в статье (см. ссылку выше).

Про большой файл. Разве? Мне кажется 394 это не так уж и много. Ну а .exe действительно надо было выкинуть, сглупил .

P.S. Может всё же посмотришь код ?

правка.
Цитата:
Сообщение от lmikle
Логирование - вывод какой-нить строчки текста в файл/мемо/и т.д. из соответсуующих событий.
Посмотри на статью или на мой код. Там как раз это есть!
__________________
Делаем'c разные игры. Искать на glscene.ru

Последний раз редактировалось DungeonLords, 23.04.2009 в 19:09.
Ответить с цитированием
  #6  
Старый 23.04.2009, 19:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

На тебе простейший пример на TIdTCPServer/Client

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdTCPConnection, IdTCPClient, IdBaseComponent, IdComponent,
  IdCustomTCPServer, IdTCPServer, IdContext, StdCtrls;

type
  TForm1 = class(TForm)
    TCPServer: TIdTCPServer;
    TCPClient: TIdTCPClient;
    btStartServer: TButton;
    btConnect: TButton;
    edLog: TMemo;
    procedure btStartServerClick(Sender: TObject);
    procedure btConnectClick(Sender: TObject);
    procedure TCPServerExecute(AContext: TIdContext);
    procedure TCPServerConnect(AContext: TIdContext);
    procedure TCPServerDisconnect(AContext: TIdContext);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btStartServerClick(Sender: TObject);
begin
  TCPServer.Active := True;
end;

procedure TForm1.btConnectClick(Sender: TObject);
begin
  TCPClient.Connect;
  edLog.Lines.Add('Client: Connected.');
  TCPClient.Disconnect;
  edLog.Lines.Add('Client: Disconnected.');
end;

procedure TForm1.TCPServerExecute(AContext: TIdContext);
begin
  edLog.Lines.Add('Server: client executed.');
end;

procedure TForm1.TCPServerConnect(AContext: TIdContext);
begin
  edLog.Lines.Add('Server: client connected.');
end;

procedure TForm1.TCPServerDisconnect(AContext: TIdContext);
begin
  edLog.Lines.Add('Server: client disconnected.');
end;

end.

В обоих компонентах в настройке указан порт 8080, а в клиенте еще и Host = 127.0.0.1. То, что они на одной форме - это не принципиально. Просто лень было несколько приложений городить.
Ответить с цитированием
  #7  
Старый 23.04.2009, 22:52
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

Вобщем работает!!! УРА! Шапки долой!

А теперь вопрос. Как сделать обработку команд от клиента серверу? Взглянул на процедуру procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); и увидел там поток . Я так и не научился читать из потока и упаваю на твою помощь. Пологаю ту статью можно выкинуть, мы пошли каким-то другим путём...
__________________
Делаем'c разные игры. Искать на glscene.ru
Ответить с цитированием
  #8  
Старый 23.04.2009, 23:19
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я не читал ту статью. Просто взял и накидал нужные компоненты.
Для разбора команд лучше всего использовать тогда пару TIdCmdTCPServer/TIdCmdTCPClient. В этих компонентах реализован командный протокол, т.е. тебе не надо будет разбираться с этим по крайней мере.

А читать из потока обычно просто. У него есть свойство длинны (не помню как в инди, в стандартном - size) и методы чтения.

Кстати, скачай и установи 10ю версию Инди, если еще не сделал этого.
Ответить с цитированием
  #9  
Старый 24.04.2009, 11:01
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

Цитата:
Сообщение от lmikle
Для разбора команд лучше всего использовать тогда пару TIdCmdTCPServer/TIdCmdTCPClient. В этих компонентах реализован командный протокол, т.е. тебе не надо будет разбираться с этим по крайней мере.
Никак не могу найти TIdCmdTCPServer. Он на вкладке Indy Servers?


Цитата:
Сообщение от lmikle
Кстати, скачай и установи 10ю версию Инди, если еще не сделал этого.
Нет не сделал. Такой дибильный сайт как http://www.indyproject.org/ нужно ещё поискать. Какого чёрта там не работает поиск и где кнопка доунлоадс на которую они мне на какой-то странице предлагали нажать? И вообще там забитаю кнопка доунлоудс, внезапно найденная в глубине сайта вообще в конце привела на это: http://www.atozed.com/indy/Installer/index.EN.aspx . Дибилизм!
__________________
Делаем'c разные игры. Искать на glscene.ru

Последний раз редактировалось DungeonLords, 24.04.2009 в 11:10.
Ответить с цитированием
  #10  
Старый 24.04.2009, 15:58
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Инди - фигня, я долго (около 3х дней) пытался через него получить Whois данные из нэта, потом зае*ало (сорри за мат, но очень неприятно. Привет модерам ), за 5 минут накидал программу из TClientSocket, реализовав элементарный протокол.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #11  
Старый 24.04.2009, 16:44
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну не знаю.
Я с индей давно работаю и никаких проблем, кроме как с SSL'ем небыло.
Хотя Whois не пробовал, а вот почтовые, HTTP, FTP протоколы использовал плотненько.
Ответить с цитированием
  #12  
Старый 24.04.2009, 16:52
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

2lmikle,
может всё- же скажешь, где качать этот Indy 10?
__________________
Делаем'c разные игры. Искать на glscene.ru
Ответить с цитированием
  #13  
Старый 24.04.2009, 18:50
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,564
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от DungeonLords
2lmikle,
может всё- же скажешь, где качать этот Indy 10?
Все тамже - http://www.indyproject.org/Sockets/D...Indy10.EN.aspx
Ответить с цитированием
  #14  
Старый 24.04.2009, 21:07
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

Цитата:
Сообщение от Admin
Вот спасибо! Теперь я счастливый.

Ой, счастье продлилось недолго. Как теперь это устанавливать? Смотрю сюда: http://www.indyproject.org/Sockets/D...lation.EN.aspx но там очень странно написано. Вот к примеру в пункте 2) по цифрой 1. прописано

Цитата:
Сообщение от indyproject.org
2) Open and compile .dpk files in the following order:
1. IndySystemX0.dpk (in Lib\System)
т.е. 2) откройте и скомпилируйте .dpk файлы в следующем порядке:
1. IndySystemX0.dpk (in Lib\System)

Ну и што? Так значит надо понимать, что X в имени файла означает цифру, соответствующую версии Delphi. Я значит компилирую IndySystem70.dpk. Потом пытаюсь его установить. Но компилятор реагируют так: Package c:\...\IndySystem70.bpl can't be install because it is noy a disign time package. Несовсем обычная ошибка гласит, что данный пакет не является disign time пакетом, что очень странно. Что делать?
__________________
Делаем'c разные игры. Искать на glscene.ru

Последний раз редактировалось DungeonLords, 24.04.2009 в 21:33.
Ответить с цитированием
  #15  
Старый 24.04.2009, 23:55
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну правильно он тебе говорит. И в инструкции написано - "скомпилируйте", а не "скомпилируйте и установите". Там сначала компиляться Run-time пакеты, а потом уже Design-time компиляться и ставятся.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter