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 ответ:
Не глядя на ваш код, я считаю, что все, что вам нужно сделать, это реализовать событие
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 в сочетании с реализацией указанных событий является самым безопасным способом убедиться, что вы полностью контролируете время жизни обоих концы.