Xojo IPCSocket подключение несколько раз


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

Задача

Соединение двух приложений:

Application1 и Application2 связаны IPCSocket. Application1-это сервер, который слушает.

Application2-это подключенный клиент.

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

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

Сценарий

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

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

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

1 2

1 ответ:

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

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

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