【问题标题】:Auto-detecting active MYSQL port in C++在 C++ 中自动检测活动的 MYSQL 端口
【发布时间】:2012-01-08 10:36:30
【问题描述】:

我正在开发一个 Qt/C++ 项目,它的功能之一是建立一个 MySQL 数据库。那段特定的代码工作正常,但用户必须提供以使其工作的一件事是 MySQL 进程当前正在侦听的端口。这通常是 3306 或 5432,(取决于操作系统...... MySQL 通常希望首先使用 3306,但我曾经尝试过使用 Postgres 端口)但我觉得我需要考虑奇怪的配置。许多用户不知道在该字段中输入什么,除非他们对 MySQL 有足够的了解,知道它使用了哪些端口。 (大多数人不这样做)我的程序的目标受众是每个可能想要保留计算机日记的人,所以如果程序可以自己找到正确的端口,那就太好了。

我可以让程序通过常用端口列表运行,直到找到正确的端口(这在大多数设置中都应该工作),但如果它能够真正确定要使用哪个端口会更好。这样,如果用户由于某种原因有一个奇怪的配置,就不会有任何问题。

知道我会怎么做吗?我试过谷歌搜索,但没有发现任何相关内容。

【问题讨论】:

  • 在每个端口上打开一个socket,并遵循MySQL连接协议的第一位。或者,只需让您的 MySQL 驱动程序尝试连接一堆端口。请注意,这两者都会有点慢。

标签: c++ mysql port


【解决方案1】:

我可以看到有两种方法可以做到这一点。一:简单的端口扫描器。就像你说的扫描所有正常使用的端口,如果没有找到你可以扫描所有端口,它应该不难实现,你扫描端口并请求响应只有 MYSQL 会给予特定方法,这种方式你知道那个端口上确实是 MySQL。

其次,您可以尝试通过注册表找出端口是什么。假设这是一个 Windows 操作系统,你可以在注册表中找到它(希望如此),如果它是 linux 操作系统,你会在 MySQL 的设置文件中找到它,等等......

但是我看不到“通用常量”,我认为实现一个简单的端口扫描器是最简单的。


实际上可能不需要注册表,在 Windows 7 上搜索我的 MySQL 目录,我发现一个“my.ini”搜索端口,它就在那里“port=theport”

因此您可能可以搜索 mySQL 目录和 .ini 文件来找到端口。

【讨论】:

  • 谢谢,我会尝试这些方法,看看我想出了什么。该程序是跨平台的,顺便说一句。
  • 是的,但是 MySQL 是一致的,所以没关系。只要你能找到MySQL目录就是。
  • 太好了,我先让 prgram 检查 my.ini。如果出现问题,我可以让它进行端口扫描。此外,这还有一个意想不到的好处。如果我的程序找不到 my.ini,那么它可以告诉用户先安装 MySQL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
相关资源
最近更新 更多