2011-11-29 4 views
2

Je travaille sur un projet Qt/C++ et l'une de ses fonctions est la mise en place d'une base de données MySQL. Ce morceau de code fonctionne très bien, mais l'un des éléments que l'utilisateur doit fournir pour le faire fonctionner est le port sur lequel le processus MySQL est en train d'écouter. C'est en général 3306 ou 5432, (en fonction de l'OS ... MySQL veut d'abord utiliser le 3306 en premier mais je l'ai essayé d'utiliser le port Postgres une fois) mais j'ai l'impression de devoir tenir compte de configurations étranges. Beaucoup d'utilisateurs n'auront aucune idée de ce qu'il faut mettre dans ce champ, à moins qu'ils en sachent assez sur MySQL pour savoir quels ports il utilise. (la plupart des gens ne le font pas) Mon public cible pour le programme est tout le monde qui pourrait vouloir tenir un journal informatisé, donc ce serait bien si le programme peut trouver le bon port tout seul. Je pourrais faire exécuter au programme une liste de ports couramment utilisés jusqu'à ce qu'il trouve le bon (ce qui devrait fonctionner dans la plupart des configurations), mais il serait préférable de savoir quel port utiliser. De cette façon, il n'y aura pas de problèmes si l'utilisateur a une configuration bizarre pour une raison quelconque.Port MYSQL actif à détection automatique en C++

Une idée de comment j'irais faire cela? J'ai essayé de googler et je n'ai rien trouvé de pertinent.

+1

Ouvrez un socket sur chaque port et suivez le premier bit du protocole de connexion MySQL. Sinon, faites en sorte que votre pilote MySQL essaye de se connecter sur un tas de ports. Notez que ces deux derniers seraient plutôt lents. – jli

Répondre

2

Je vois deux méthodes pour y arriver. Un: un scanner de port simple. Comme vous avez dit de scanner tous les ports normalement utilisés, si rien n'est trouvé vous pouvez scanner tous les ports, cela ne devrait pas être si difficile à implémenter, vous scannez les ports et demandez une réponse que MYSQL donnera à une méthode particulière vous savez qu'il s'agit bien de MySQL sur ce port. Deuxièmement, vous pourriez essayer de comprendre ce que le port est à travers le registre. En supposant qu'il s'agit d'un système d'exploitation Windows, vous pourriez trouver dans le registre (si tout va bien), si c'était OS Linux, vous le trouveriez dans les fichiers de paramètres de MySQL, etc ...

Mais je ne vois pas de "CONSTANTE UNIVERSELLE" pour cela , Je pense qu'il serait plus facile de mettre en œuvre un simple scanner de port.


Le registre ne sera probablement pas nécessaire en fait, la recherche de mon répertoire MySQL sur Windows 7 J'ai trouvé un « my.ini » recherché pour le port et son là « port = ThePort »

Ainsi vous peut probablement rechercher le répertoire mySQL et le fichier .ini pour trouver le port.

+0

Merci, je vais essayer ces méthodes et voir ce que je viens avec. Le programme est multi-plateforme, BTW. –

+0

Oui, mais MySQL est cohérent, donc cela n'aura pas d'importance. tant que vous pouvez trouver le répertoire MySQL qui est. – u8sand

+1

Excellent, je vais d'abord vérifier le programme my.ini. Si quelque chose ne va pas, je pourrais lui faire faire une analyse de port. En outre, cela a un avantage inattendu .. si mon programme ne peut pas trouver my.ini alors il peut dire à l'utilisateur d'installer MySQL en premier. –

Questions connexes