|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
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
|
|||
|
|||
А если попробовать 127.0.0.1?
Ну и в OnConnect сервера вставь какое-нить логирование - вообще хоть что-то подсоединяется. Можно для начала попробовать подключиться к серверу через telnet - проверить сам сервер. |
#3
|
|||
|
|||
Цитата:
Цитата:
Цитата:
Вобщем присылаю исходник сервера и клиента, вес файла 394kb: http://ifolder.ru/11774893 Делаем'c разные игры. Искать на glscene.ru Последний раз редактировалось DungeonLords, 23.04.2009 в 19:00. |
#4
|
|||
|
|||
telnet - эо специальная программка в винде. Когда писал свой почтовый сервис, тестировал именно с помощью ее. Благо почтовые протоколы достаточно простые.
Логирование - вывод какой-нить строчки текста в файл/мемо/и т.д. из соответсуующих событий. Ну и зачем такой большой файл? Убери из него бинарники - все-равно пересобирать для теста. А еще проще - можно выложить сразу сюда важные куски кода. Например, установка параметров клиента и открытие соединения и Установка параметров сервера и открытие порта на прослушивание. |
#5
|
|||
|
|||
Цитата:
Про большой файл. Разве? Мне кажется 394 это не так уж и много. Ну а .exe действительно надо было выкинуть, сглупил . P.S. Может всё же посмотришь код ? правка. Цитата:
Делаем'c разные игры. Искать на glscene.ru Последний раз редактировалось DungeonLords, 23.04.2009 в 19:09. |
#6
|
|||
|
|||
На тебе простейший пример на 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
|
|||
|
|||
Вобщем работает!!! УРА! Шапки долой!
А теперь вопрос. Как сделать обработку команд от клиента серверу? Взглянул на процедуру procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); и увидел там поток . Я так и не научился читать из потока и упаваю на твою помощь. Пологаю ту статью можно выкинуть, мы пошли каким-то другим путём... Делаем'c разные игры. Искать на glscene.ru |
#8
|
|||
|
|||
Я не читал ту статью. Просто взял и накидал нужные компоненты.
Для разбора команд лучше всего использовать тогда пару TIdCmdTCPServer/TIdCmdTCPClient. В этих компонентах реализован командный протокол, т.е. тебе не надо будет разбираться с этим по крайней мере. А читать из потока обычно просто. У него есть свойство длинны (не помню как в инди, в стандартном - size) и методы чтения. Кстати, скачай и установи 10ю версию Инди, если еще не сделал этого. |
#9
|
|||
|
|||
Цитата:
Цитата:
Делаем'c разные игры. Искать на glscene.ru Последний раз редактировалось DungeonLords, 24.04.2009 в 11:10. |
#10
|
||||
|
||||
Инди - фигня, я долго (около 3х дней) пытался через него получить Whois данные из нэта, потом зае*ало (сорри за мат, но очень неприятно. Привет модерам ), за 5 минут накидал программу из TClientSocket, реализовав элементарный протокол.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#11
|
|||
|
|||
Ну не знаю.
Я с индей давно работаю и никаких проблем, кроме как с SSL'ем небыло. Хотя Whois не пробовал, а вот почтовые, HTTP, FTP протоколы использовал плотненько. |
#12
|
|||
|
|||
2lmikle,
может всё- же скажешь, где качать этот Indy 10? Делаем'c разные игры. Искать на glscene.ru |
#13
|
||||
|
||||
Цитата:
|
#14
|
|||
|
|||
Цитата:
Ой, счастье продлилось недолго. Как теперь это устанавливать? Смотрю сюда: http://www.indyproject.org/Sockets/D...lation.EN.aspx но там очень странно написано. Вот к примеру в пункте 2) по цифрой 1. прописано Цитата:
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
|
|||
|
|||
Ну правильно он тебе говорит. И в инструкции написано - "скомпилируйте", а не "скомпилируйте и установите". Там сначала компиляться Run-time пакеты, а потом уже Design-time компиляться и ставятся.
|