Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
 Аватар для chiribas
12 / 12 / 0
Регистрация: 06.05.2011
Сообщений: 250

Связь между приложениями

03.01.2013, 22:07. Показов 3558. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли установить связь между приложениями, не создавая для этого сервер? Может есть готовый бесплатный сервиз?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.01.2013, 22:07
Ответы с готовыми решениями:

Связь между приложениями
Подскажите, пожалуста, как можно с помощью WInAPI функций связывать приложения между собой и заставить обмениваться их данными? то есть...

Переменные и связь между приложениями
У меня вопрос любопытства ради, может кто-то из Вас и сталкивался. К примеру существует два отдельных экзешника на VB. Возможно ли запустив...

Связь между двумя приложениями
Здравствуйте, у меня такой вопрос: как организовать связь между двумя приложениями написанными на C#. Суть вот в чём одно приложение...

23
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
03.01.2013, 22:21
chiribas, это реализуемо через, например, p2p. Если swf располагаются на одном ПК - LocalConnection.
...может есть еще варианты, но я их или не припоминаю, или не знаю.
0
 Аватар для chiribas
12 / 12 / 0
Регистрация: 06.05.2011
Сообщений: 250
03.01.2013, 22:29  [ТС]
p2p это бесплатно? и если не трудно можете показать пример(в одном приложение нажимаешь кнопку, а в другом появляется " Trace("") " ) или хотя бы ссылку на урок. Буду очень благодарен.
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
03.01.2013, 22:33
Это видео нашел через поиск с официального сайта Adobe. Объясняются основы. Чтение документации по упомянутым классам должно еще больше прояснить ситуацию.
1
 Аватар для chiribas
12 / 12 / 0
Регистрация: 06.05.2011
Сообщений: 250
04.01.2013, 16:28  [ТС]
Я сделал простой чат, но в браузере плеер не разрешает использовать сеть. Как разрешить доступ к сети?
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
04.01.2013, 16:45
chiribas, откуда запускается swf? Если с жесткого диска, то или поковыряться в настройках безопасности (добавить доверенные папки/файлы) или запускать с сервера (даже локального)

Добавлено через 41 секунду
Цитата Сообщение от chiribas Посмотреть сообщение
не разрешает использовать сеть
И подобные фразы не плохо бы подкреплять цитированием ошибки/сообщения
0
 Аватар для chiribas
12 / 12 / 0
Регистрация: 06.05.2011
Сообщений: 250
04.01.2013, 16:52  [ТС]
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
04.01.2013, 17:10
Ответ прежний
Цитата Сообщение от TanaTiX Посмотреть сообщение
или поковыряться в настройках безопасности (добавить доверенные папки/файлы) или запускать с сервера (даже локального)
0
 Аватар для chiribas
12 / 12 / 0
Регистрация: 06.05.2011
Сообщений: 250
04.01.2013, 17:22  [ТС]
Запустил с сервера, с довереностью всё нормально, но не передаются сообщения
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
04.01.2013, 17:24
chiribas, ну не могу я угадывать, что там у вас происходит - ни текста ошибки, если таковые имеются, ни пример кода, ни исходники проекта. Я, как и другие форумчане, не телепат.
0
 Аватар для chiribas
12 / 12 / 0
Регистрация: 06.05.2011
Сообщений: 250
04.01.2013, 18:14  [ТС]
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
var netConnection:NetConnection = new NetConnection();
var netGroup:NetGroup;
var netStream:NetStream;
var groupspec:GroupSpecifier;
 
netConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
function netStatusHandler(e:NetStatusEvent):void
{
    switch (e.info.code)
    {
        case 'NetConnection.Connect.Success' :
            groupspec = new GroupSpecifier("K1");
            groupspec.serverChannelEnabled = true;
            groupspec.multicastEnabled = true;
            groupspec.postingEnabled = true;
            groupspec.routingEnabled = true;
            groupspec.peerToPeerDisabled = false;
            netStream = new NetStream(netConnection,groupspec.groupspecWithAuthorizations());
 
            trace("Connect!");
            break;
        case 'NetStream.Connect.Success' :
            netGroup = new NetGroup(netConnection,groupspec.groupspecWithAuthorizations());
            trace("ConnectGroup!");
            break;
        case 'NetGroup.Connect.Success' :
            break;
        case 'NetGroup.Posting.Notify' : //Пришло сообщение
            trace("Message: " + e.info.message); //Здесь клип B переходит на второй кадр(становится красным)
            break;
        default :
            break;
    }
}
 
netConnection.connect("rtmfp://p2p.rtmfp.net", "мой_ключ");//Подключение
 
B.addEventListener(MouseEvent.CLICK,B_CLICK);//Отправка сообщения при нажатии на клип B
function B_CLICK(e:MouseEvent):void
{
    var obj:Object = {text:"Hello"};
    netGroup.sendToAllNeighbors(obj);
}
Ошибок не происходит, но при нажатии на другой клип в таком же запущенном приложении тоже ни чего не происходит
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
04.01.2013, 18:26
chiribas, странно, что ничего не происходит, т.к. у меня пишет
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at Untitled_fla::MainTimeline/B_CLICK()
Добавлено через 22 секунды
При этом netGroup - тот самый null
0
 Аватар для chiribas
12 / 12 / 0
Регистрация: 06.05.2011
Сообщений: 250
04.01.2013, 18:32  [ТС]
TanaTiX, скорее всего надо подождать когда произойдёт соединение?

ActionScript 3
1
2
3
4
case 'NetStream.Connect.Success' :
netGroup = new NetGroup(netConnection,groupspec.groupspecWithAuthorizations());
trace("ConnectGroup!");
break;
тут он перестанет быть null
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
04.01.2013, 18:54
chiribas, как-то тестировал эту фичу, сейчас гляну свои старые исходники.

Добавлено через 19 минут
В моем проекте 3 класса: основной, класс для работы с соединением и событие.
Писалось все давно и почти на коленке, так что могут быть различные погрешности.
Кликните здесь для просмотра всего текста
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.ui.Keyboard;
    
    public class Main extends Sprite 
    {
        
        
        private var _txt:TextField;
        private var _commonGroup:PrivateGroup;
 
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            
            _txt = new TextField();
            _txt.autoSize = TextFieldAutoSize.LEFT;
            _txt.border = true;
            addChild(_txt);
            
            _commonGroup = new PrivateGroup();
            _commonGroup.addEventListener(PrivateGroup.INIT, onGroupInit, false, 0, true);
            _commonGroup.addEventListener(StringEvent.GET_MESSAGE, onGetMessage, false, 0, true);
            _commonGroup.init();
        }
        
        private function onGetMessage(e:StringEvent):void 
        {
            if (_txt.text.length > 0) {
                _txt.appendText("\n");
            }
            _txt.appendText(e.message);
        }
        
        private function onGroupInit(e:Event):void 
        {
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyEvent);
        }
        
        private function onKeyEvent(e:KeyboardEvent):void 
        {
            if (e.keyCode == Keyboard.ENTER) {
                var mes:Object = { };
                var message:String = Math.random().toString();
                mes.text = message;
                _commonGroup.sendMessage(mes);
            }
        }
        
    }
    
}
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package  
{
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.NetStatusEvent;
    import flash.net.GroupSpecifier;
    import flash.net.NetConnection;
    import flash.net.NetGroup;
    import flash.net.NetStream;
    /**
     * ...
     * @author TanaTiX
     */
    public class PrivateGroup extends EventDispatcher
    {
        private const SERVER:String = "rtmfp://p2p.rtmfp.net/";//сервер
        private const DEVKEY:String = "ваш код";// получить его можно [url]http://www.adobe.com/cfusion/entitlement/index.cfm?e=cirrus[/url]
        private const GROUP:String = "название канала";// это название нашего канала
        static public const INIT:String = "init";
        
        private var _netConnection:NetConnection;
        private var _netStream:NetStream;
        private var _netGroup:NetGroup;
        private var _sequence:int;
        
        
        public function PrivateGroup() 
        {
            
        }
        public function init():void {
            _sequence = 0;
            
            _netConnection = new NetConnection();
            _netConnection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
            _netConnection.connect(SERVER + DEVKEY);
        }
        private function onNetStatus(e:NetStatusEvent):void 
        {
            trace("connect" + Math.random(), e.info.code);
            switch(e.info.code) {
                case "NetConnection.Connect.Success":{
                    onConnect();
                    break;
                }
                case "NetGroup.Connect.Success":{
                    onGroupConnect();
                    break;
                }
                case "NetGroup.Posting.Notify":{
                    onGetMessage(String(e.info.message.text));
                    break;
                }
            }
        }
        
        private function onConnect():void 
        {
            var gs:GroupSpecifier = new GroupSpecifier(GROUP);
            gs.postingEnabled = true;
            gs.serverChannelEnabled = true;
            _netGroup = new NetGroup(_netConnection, gs.groupspecWithAuthorizations());
            _netGroup.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
            
        }
        private function onGroupConnect():void {
            dispatchEvent(new Event(INIT));
        }
        
        private function onGetMessage(message:String):void {
            dispatchEvent(new StringEvent(StringEvent.GET_MESSAGE, message));
        }
        public function sendMessage(value:Object):void {
            value.sequnce = _sequence++;
            value.sender = _netConnection.nearID;
            _netGroup.post(value);
        }
    }
 
}
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package  
{
    import flash.events.Event;
    
    /**
     * ...
     * @author TanaTiX
     */
    public class StringEvent extends Event 
    {
        public static const GET_MESSAGE:String = "getMessage";
        private var _message:String;
        
        public function StringEvent(type:String, message:String, bubbles:Boolean=false, cancelable:Boolean=false) 
        { 
            super(type, bubbles, cancelable);
            _message = message;
            
        } 
        
        public override function clone():Event 
        { 
            return new StringEvent(type, _message, bubbles, cancelable);
        } 
        
        public override function toString():String 
        { 
            return formatToString("StringEvent", "message", "type", "bubbles", "cancelable", "eventPhase"); 
        }
        
        public function get message():String 
        {
            return _message;
        }
        
    }
    
}

Для тестирования запустить 2 (или более) копии приложения, и клацать ENTER при выделении одной из них - будет передаваться случайное число.
1
 Аватар для chiribas
12 / 12 / 0
Регистрация: 06.05.2011
Сообщений: 250
06.01.2013, 12:21  [ТС]
Как узнать что один из пользователей отключился?

Добавлено через 30 минут
Я уже узнал. Это происходит когда в netStatusHandler свойство e.info.code = 'NetGroup.Neighbor.Disconnect'.
А как узнать какой пользователь отключился?
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
06.01.2013, 12:57
chiribas, посмотри в хэндлере netStatusHandler объект события (JSON-ом его распарсь или через точку останова), там будет вся доступная информация. Еще при коннекте можно запоминать пользователей, а потом вычислять кого не хватает.
0
 Аватар для chiribas
12 / 12 / 0
Регистрация: 06.05.2011
Сообщений: 250
06.01.2013, 13:12  [ТС]
Я разобрался, я делаю так:
ActionScript 3
1
2
3
case 'NetGroup.Neighbor.Disconnect' :
trace(e.info.peerID)
break;
так я получаю id того кто вышел, и также кто зашёл. Как узнать свой ID? или как отправить сообщение пользователю с определённым ID?
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
06.01.2013, 13:16
Цитата Сообщение от chiribas Посмотреть сообщение
или как отправить сообщение пользователю с определённым ID
У вас должен быть отдельно настроенный канал.
0
 Аватар для chiribas
12 / 12 / 0
Регистрация: 06.05.2011
Сообщений: 250
06.01.2013, 13:29  [ТС]
А это как? Можете объяснить если не трудно?
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
06.01.2013, 13:35
chiribas, так также, как и описано выше и работает сейчас
Создать еще одно "соединение"
Т.е. у тех 2х должны быть уникальные названия группы, более никому не доступные. Т.е. один из пользователей отправляет исходной группе что он хочет устроить тет-а-тет с тем-то пользователем (его id), все у кого id не соответствует проходят мимо, а те двое устраивают свой "междусобойчик". И да, это очень не секьюрно, таким образом передавать шифры из пентагона не стал бы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.01.2013, 13:35
Помогаю со студенческими работами здесь

Как организовать связь между приложениями без статического IP. C++ Builder
Доброго времени суток Возникла задача предачи данных с другим офисом. С написанием ПО проблем вроде нет (использую INDY в Builder), но...

Как установить связь по bluetooth между приложениями без спаривания
Вопрос заключается в следующем: Предположим я пишу приложение на jme2. Это приложение будет установлено на 2-х телефонах, с поддержкой...

Обмен данных между DOS-приложениями и Windows-приложениями
Как настроить установки Windows 98, чтобы нажатием клавиши PrtSc рисунок, созданный Borland Pascal-программой, скопировался в буфер обмена?...

Сигналы между приложениями
Собственно. Есть служба и оболочка(программа) к ней... как отправить "сигнал" из программы к службе чтоб ее не перезапускать? желательно...

Обмен между приложениями
Есть два приложения в ОС Windows , одно консольное которое ждет ввода трех чисел std::cin , второе диалоговое , диалоговое запускает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru