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