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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обмен сообщениями между программами, Обмен сообщениями между программами 
:(
    Опции темы
dwik
Дата 1.12.2004, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите, плиз, как послать сообщение из одной программы и получить его в другой.
Знаю, это как-то можно сделать через TUDPSocket

Если у кого-нить есть примерчик, дайте ссылку.




PM MAIL   Вверх
<Spawn>
Дата 2.12.2004, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



А программы то находятся на разных компьютерах? Если нет, то особого смысла использовать сокеты тут нет. И еще одно - TUDPSocket тебе тут вряд ли поможет, так как UDP это протокол не гаратирующий успешную передачу данных. Тебе нужно использовать, например TCP - компоненты TidTCPClient\TidTCPServer на вкладке IndyClients\IndyServers соответственно. Демки мпожно скачать отсюда


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Плаха
Дата 2.12.2004, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 10.11.2004
Где: МО п. Киевский

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



это то что по сути тебе надо
Цитата
Изготовлением первой части мы сейчас и займемся. Запускаем Delphi и помещаем на форму компонент ServerSocket с вкладки Internet палитры компонентов:
Больше нам ничего не понадобится. Все, что нужно дополнительно указать, так это порт, через который будут связываться наши программы. Я задавал 7766. Берите что-нибудь похожее больше 5000 — не ошибетесь. Кликаем дважды по нашей форме и в обработчике пишем:

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm:=false;
ServerSocket1.Port:=7766;
ServerSocket1.Active:=true;
end;

Этим кодом мы прячем главную форму, устанавливаем порт (его можно изменять, но главное — чтобы у клиента и сервера значения port были одинаковы) и активируем наш сервер. Теперь он висит в памяти в непрерывном ожидании сообщения от клиента. В качестве домашнего задания модифицируйте этот код так, чтобы при запуске сервер прописывал себя на автозагрузку системы. Сделать это легко, если вы внимательно ознакомились с первым пунктом данной статьи. Теперь займемся самим обработчиком сообщений. Выделяем на форме наш компонент ServerSocket и на вкладке Events инспектора объектов дважды кликаем по свойству OnClienRead:

procedure TForm1.ServerSocket1 ClientRead(Sender: TObject;Socket: TCustomWinSocket);
begin
MessageBox(0,PCHAR(Socket.ReceiveText),"Windows XP", MB_ICONERROR);
end;

Как видим, на экран выбрасывается окно с заголовком "Windows XP" , содержащее строку, пришедшую к нам от клиента в переменной Socket. ReceiveText.
Если с написанием сервера все довольно просто, то создание клиента потребует немного больше времени. Как-никак это ваше основное оружиеsmile. Создаем новый проект и помещаем на форму два Edit'а, две кнопки Button и компонент ClientSocket с вкладки Internet палитры компонентов:
Для начала заведем глобальную переменную булевского типа, которая будет устанавливаться в true при удачном соединении с сервером.

var
Form1: TForm1;
isconnect:boolean=false;

В первом поле должен быть введен IP-адрес машины, на которой должен быть запущен сервер. При нажатии на кнопку Button1 пробуем соединиться:

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Address:=Edit1.Text;
ClientSocket1.Port:=7766;
ClientSocket1.Active:=true;
end;

Не забудьте, что перед нажатием на кнопку нужно ввести в поле Edit1 IP-адрес машины противника вида "xxx. xxx.xxx.xxx" (без кавычек), и у клиента и работающего сервера должны совпадать номера порта (в данном случае 7766). Для отслеживания удачного соединения или не менее удачного разъединения выделите Client Socket и в событиях управляйте свойствами OnConnect и OnDisconnect соответственно:

procedure TForm1.ClientSocket1 Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ShowMessage('Соединение успешное!');
isconnect:=true;
end;

procedure TForm1.ClientSocket1 Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ShowMessage('Соединение разорвано сервером!');
isconnect:=false;
end;

В случае успешного или неуспешного соединения с сервером мы получим соответствующее сообщение. Осталось только в поле Edit2 ввести нужный текст и нажать Button2:

procedure TForm1.Button2Click(Sender: TObject);
begin
if isconnect then
ClientSocket1.Socket.SendText(edit2. text)
else ShowMessage('Нет соединения!');
end;

--------------------
Принимай то что есть и устраивайся как хочеш
PM MAIL ICQ   Вверх
fuckerok
Дата 9.12.2004, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А можно каналы использовать, если программы на одном компутере, только вроде это только под Unix системы smile
--------------------
PM MAIL ICQ   Вверх
maxim1000
Дата 9.12.2004, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

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



Цитата
А можно каналы использовать, если программы на одном компутере, только вроде это только под Unix системы

каналы есть и под Windows
более того: под Windows они работают по локальной сети


--------------------
qqq
PM WWW   Вверх
Akella
  Дата 11.12.2004, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



держи пример на компонентах UDP

Присоединённый файл ( Кол-во скачиваний: 45 )
Присоединённый файл  Chat.zip
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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