2015-11-24 6 views
2

Я уже некоторое время программировал программирование и программирование IPC, но никогда в Xojo. У меня есть опыт работы на C++ и Python, но я довольно новичок в Xojo и довольно потерян.Xojo IPCSocket, подключающийся несколько раз

Проблема

Подключение двух приложений:

Application1 и Application2 соединены IPCSocket. Приложение1 - это сервер, который прослушивает.

Приложение2 является клиентом, который подключен.

Когда приложение2 отключено, а затем перезапущено, оно больше не будет подключаться к Application1.

Проверка Application1 в отладчике показывает, что error 102 Lost Connection является LastErrorCode

Сценарий

У нас есть приложение, которое находится в Xojo. Я следил за проектом примера IPCSocket, который включен, а также с использованием документации для IPCSocket.

Я могу заставить сокет работать, но я не могу заставить сокет успешно отключиться, а затем снова подключиться к тому же локальному серверу. В этом примере не указывается, как это сделать. Документация - это то, что я считаю редким.

Можно ли отключить IPCSocket Xojo и повторно подключиться аналогично тому, как функционирует сервер, подключающийся через TCP? или ... Я трачу свое время на этот маршрут, и я должен изучить другие способы IPC?

ответ

3

Не смотря на свой код, я считаю, все, что вам нужно сделать, это реализовать Error событие на обоих концах, и если она срабатывает, вы закрываете IPCSocket, а затем вновь открыть его (т.е. с вызовом Listen на одном конце , и вызывая Connect с другой). Событие Error эффективно также выступает в качестве «отключенного» события.

Кроме того, прежде чем вы можете Listen снова, вы должны удалить файл на указанный Path или Listen вызовет ошибку (по крайней мере, на OS X).

Способ, которым я пользуюсь IPCSocket, подключающее приложение (app2) всегда запускается в качестве вспомогательного приложения слушателем (app1), используя класс оболочки в режиме Async (theShell.Mode = 1). В этом случае вы также можете заметить, что приложение-помощник прекратилось, выполнив событие Shell «Completed». И если ваш сервер (app1) завершает работу или выходит из строя, Shell также автоматически выйдет из приложения 2. Таким образом, использование Shell и IPCSocket совместно с реализацией указанных событий является самым безопасным способом убедиться, что вы полностью контролируете сроки жизни обоих концов.

+0

Это было именно то, что мне нужно. Я обнаружил, что моя основная проблема, казалось, заключалась в том, что я не удалял файл сокета temp, который создавал xojo. Также использование события 'error' было очень элегантным. Я смог получить пример работы проекта, и я ожидаю, что смогу сделать эти простые изменения в нашем реальном приложении. Также следует отметить для кого-то еще, что мне пришлось называть 'close' перед удалением и вызовом' listen' снова. Благодаря! – Dan