作者spider391 (小乖)
看板C_and_CPP
標題[問題] C++ 處理 IPv4 的二三事
時間Wed Mar 10 16:34:51 2010
板上各位大大好:
我現在目前在寫一個網路查詢的程式,遇到些處理 IP 上的問題,
想請教大家的意見。
目前開發環境在 windows XP , 用的是 wxWidgets 的 C++ Library
我想要處理
==========================================================
eq. 192.168.8.0 ~ 192.168.8.254 範圍內的 IP
// test 192.168.8.0 連線狀態
// test 192.168.8.1 連線狀態
...
// test 192.168.8.254 連線狀態
==========================================================
最直覺的想法是將 IP 包成一個 class,然後用迴圈處理。
eq.
class IP{
std::string ip;
public:
IP(std::string my_ip);
IP& operator++();
bool operator< (const IP& other) const;
std::string get();
};
IP ip_start("192.168.8.0");
IP ip_end("192.168.8.254");
for(;ip_start<ip_end; ++ip_start)
{
// 測試連線
testConnect(ip_start);
}
我的問題是,關於 operator++ 是否有比較好的實作方式?
或是有現成的類似 class 可以用 (MFC 的類別我還沒有 survey,我會在查看看)
我在網路上找到的
#include <winsock.h>
unsigned long inet_addr(
__in const char *cp
); 函式 不符合我需求,我想要的是 ip_start++ 後 (原本是 192.168.8.0)
會變成 192.168.8.1。
我自己實作的方式是用 ip[4] 的方式 parse 字串將每個整數存起來
加一後 (若是遇到 255 要考慮進位) 在轉成字串 ...
看了之後覺得比董卓還醜,不忍目睹,因此想問各位有甚麼好想法
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.177.202
推 loveme00835:用32位元整數, 一次搞定 03/10 16:38
→ loveme00835:11000000 10101000 00001000 00000000 到 03/10 16:40
→ loveme00835:11000000 10101000 00001000 11111110 03/10 16:41
推 VictorTom:題外話, ...255的subnet, ...0應該是name不用test吧@_@" 03/10 16:43
推 loveme00835:WIN 32 API 的 IN_ADDR 結構跟相關函式可以考慮一下 03/10 16:47