2011-05-18 130 views
1

用Delphi XE和winsock的單元inet_addr返回-1本地主機

我有以下代碼:

var 
    fHost: AnsiString; 
begin 
    inet_addr(PAnsiChar(fhost)); 

fHost可以是IP地址或主機名。

fhost = '127.0.0.1'它工作正常但是,當fHost = 'localhost'調用失敗並返回-1。我注意到,在我的複雜應用程序inet_addr未能解決任何主機名稱,只能與IP地址一起使用。

如果我將這段代碼輸出到一個簡單的測試應用程序,那麼解析localhost(和主機名)就可以正常工作。

我已經嘗試將127.0.0.1 localhost行添加到主機文件中,並沒有什麼區別。

爲什麼此代碼在一個應用程序中失敗並且每次都在簡單的測試工具中工作?

+0

順便說一句,-1是INADDR_NONE,預期的錯誤返回值 – user422039 2011-05-18 09:18:31

+1

我已經解決了這個問題。 我的應用程序是從2007年的Delphi轉換成的Delphi XE 2007年的Delphi,winsock.pas限定INADDR_NONE = -1 對於在Delphi XE一些未知的原因,winsock.pas限定INADDR_NONE = DWORD($ FFFFFFFF); 這意味着我的代碼解析本地主機的情況下,如果(資源= INADDR_NONE),然後永遠不會被調用。 感謝您花時間回答我的問題。 – 2011-05-18 10:42:13

回答

4

您的測試代碼可能不正確,inet_addr將包含IP地址的字符串轉換爲數字值,不是解析主機。爲此,請使用gethostbyname

+0

這是我想輸入解析地址的錯誤。我不。我想要'inet_addr'的正確結果 – 2011-05-18 10:25:31

+1

@Paul Endersby:當你給'inet_addr' *任何東西*除了一個文字IP,它將返回'INADDR_NONE'又名'-1'。 'inet_addr'不能用於轉換「localhost」 - 「localhost」不是IP。 – Erik 2011-05-18 11:06:04

相關問題