Serg Posted June 27, 2019 Share Posted June 27, 2019 Добрый день! Как узнать при старте сервера что сервер с данным портом уже запущен и закрыть его без сообщения об ошибке. Спасибо Link to comment Share on other sites More sharing options...
Serg Posted June 27, 2019 Author Share Posted June 27, 2019 И проверить что название сервера то же. Link to comment Share on other sites More sharing options...
dbf_usr Posted June 27, 2019 Share Posted June 27, 2019 По сути Вы собираетесь определить название приложения и порт сторонней программы и не важно что это за приложение, оно работает автономно в отельной памяти. Вам нужно или писать сканер порта или придумать способ взаимодействия Вашего приложения с внешним миром. Например через файл. Запустилось приложение сделали туда запись, выгрузили приложение - удалили запись. Плюс в том, что не надо взаимодействовать с системой, а минус в том, что при аварийном завершении или при принудительной снятии задачи, файлик останется не почищенный. Можно по другому - создать сокет и открыть служебный порт для соединения с другими программами и по паролю принимать соединение от другого экземпляра своей программы. По отрытому порту и возможности с ним соединиться сможете определить запущена прога или нет, а можно еще и реализовать обмен информацией, к примеру запросить номер порта, отправить номер порта... Выбирайте какой путь Вам ближе. Link to comment Share on other sites More sharing options...
Serg Posted June 27, 2019 Author Share Posted June 27, 2019 Нет вы не правильно меня поняли или я недостаточно точно написал. 1.Стартует сервер UNIGUI - и вываливается ошибка что порт на котором он настроен занят - вопрос где именно перехватит эту ошибку. 2.Наверняка uNIGUI делает где то метку что работает программа именно с таким названием. Link to comment Share on other sites More sharing options...
stas Posted June 28, 2019 Share Posted June 28, 2019 https://stackoverflow.com/questions/2156151/how-to-check-if-a-tcp-port-is-available-with-delphi Link to comment Share on other sites More sharing options...
Serg Posted July 1, 2019 Author Share Posted July 1, 2019 Я недостаточно прямо указал свой вопрос) 1.Загружается приложение UniGui. 2.Порт который указан для работы приложения оказывается занят. 3.Возникает ошибка 'Порт занят' 4. Где перехватить ошибку что бы правильно закрыть приложение без сообщения об ошибке и сделать некие действия. Link to comment Share on other sites More sharing options...
stas Posted July 1, 2019 Share Posted July 1, 2019 function PortTCPIsOpen(dwPort : Word; ipAddressStr:string) : boolean; var client : sockaddr_in;//sockaddr_in is used by Windows Sockets to specify a local or remote endpoint address sock : Integer; begin client.sin_family := AF_INET; client.sin_port := htons(dwPort);//htons converts a u_short from host to TCP/IP network byte order. client.sin_addr.s_addr := inet_addr(PChar(ipAddressStr)); //the inet_addr function converts a string containing an IPv4 dotted-decimal address into a proper address for the IN_ADDR structure. sock :=socket(AF_INET, SOCK_STREAM, 0);//The socket function creates a socket Result:=connect(sock,client,SizeOf(client))=0;//establishes a connection to a specified socket. end; UniserverModule.BeforeInit 1 Link to comment Share on other sites More sharing options...
Serg Posted July 1, 2019 Author Share Posted July 1, 2019 UniGUI сам знает что не может стартовать на занятом порту. Зачем еще проверять. Нужно только это отловить. В этом и заключается вопрос. Link to comment Share on other sites More sharing options...
stas Posted July 2, 2019 Share Posted July 2, 2019 UniserverModule.BeforeInit Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now