2011-11-29 40 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。 –