2011-11-29 49 views
2

我正在开发一个Qt/C++项目,其中一个功能是设置一个MySQL数据库。这段代码可以正常工作,但用户必须提供的其中一项功能是MySQL进程当前正在监听的端口。这通常是3306或5432,(取决于操作系统... MySQL通常首先要使用3306,但我曾尝试使用Postgres端口),但我觉得我需要考虑奇怪的配置。许多用户将不知道应该在该领域投入什么,除非他们对MySQL有足够的了解以了解它使用的端口。 (大多数人不这样做)我的程序目标受众是每个想要保存电脑日记的人,所以如果程序能够自己找到正确的端口,那将会很不错。在C++中自动检测活动MYSQL端口

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

任何想法如何去做这件事?我尝试了谷歌搜索,并没有发现任何相关信息。

+1

在每个端口上打开一个套接字,并遵循MySQL连接协议的第一位。另外,也可以让你的MySQL驱动试图连接一堆端口。注意这两个都会有点慢。 – jli

回答

2

我可以看到有两种方法可以做到这一点。一:简单的端口扫描仪。就像你说的那样扫描所有通常使用的端口,如果没有发现任何东西,你可以扫描所有的端口,它不应该很难实现,你扫描端口并要求响应,只有MYSQL会给出一个特定的方法,这样你知道这个端口上确实是MySQL。

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

但我看不到“通用恒定” ,我认为这将是最简单的实现一个简单的端口扫描仪。


注册表可能不会实际需要,搜索我的MySQL目录在Windows 7上我发现了一个“my.ini的”搜索端口和其右侧有“口= theport”

因此你可以搜索mySQL目录和.ini文件来查找端口。

+0

谢谢,我会尝试这些方法,看看我想出了什么。该方案是跨平台的,BTW。 –

+0

是的,但是MySQL是一致的,所以它没关系。只要你能找到那个MySQL目录。 – u8sand

+1

非常好,我会先检查一下my.ini。如果出现问题,我可以让它进行端口扫描。另外,这具有意想不到的好处。如果我的程序找不到my.ini,那么它可以告诉用户先安装MySQL。 –