欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Delphi 獲取Ip地址的方法總結

Delphi 獲取Ip地址的方法總結

通過(guò)注冊表獲取或修改Ip

想到Windows會(huì )把系統網(wǎng)卡相關(guān)信息存入注冊表,肯定可通過(guò)注冊表讀取具體ip信息。大致思路是找HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards ,由NetworkCards得分支表示各個(gè)網(wǎng)卡的信息通過(guò)ServiceName到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces 下找到對應的網(wǎng)卡配置詳細信息,通過(guò)對注冊表的read與write實(shí)現讀取或修改ip地址等信息。

通過(guò)解析批處理命令結果獲取

在cmd命令行輸入ipconfig可以顯示出當前電腦ip地址,可以考慮先執執行命令"Ipconfig /all >Ips.txt",然后解析Ips.txt文件得到本機的Ip信息,此方法較繁雜。

通過(guò)delphi控件獲取Ip

找到fastnet 下的 Tpowersock控件,利用 該控件localip屬性返回 本機(主要指局域網(wǎng)) ip地址 。 放一個(gè)控件在窗體上可得到本機IP,方便簡(jiǎn)單。

通過(guò)WinSock函數獲取Ip

此方法在程序中常用,一般函數如下:

//多網(wǎng)卡 將IP地址寫(xiě)入到列表,求本機IP的話(huà)返回IP列表中的第一個(gè)即可,該函數要引用 WinSock

function GetLocalIpList(var IpList:TStringList):Integer;

type

TaPInAddr = array[0..10] of PInAddr;

PaPInAddr = ^TaPInAddr;

var

HostName: array [0..MAX_PATH] of char;

NameLen: Integer;

WSData: TWSAData;

lpHostEnt: PHostEnt;

I: Integer;

pptr: PaPInAddr;

begin

Result := 0;

if WSAStartup(MakeWord(2,0), WSData) <> 0 then Exit;

try

NameLen := sizeof(HostName);

fillchar(HostName, NameLen, 0);

NameLen := GetHostName(HostName, NameLen);

if NameLen = SOCKET_ERROR then Exit;

lpHostEnt := GetHostByName(HostName);

if lpHostEnt = Nil then Exit;

I := 0;

pPtr := PaPInAddr(lpHostEnt^.h_addr_list);

IpList.Clear;

while pPtr^[I] <> nil do

begin

IpList.ADD( inet_ntoa(pptr^[I]^));

Inc(I);

end;

Result := IpList.Count;

finally

WSACleanup;

end;

end;

該函數用到的主要Winsock方法有:

(1)WSAStartup,即WSA(Windows SocKNDs Asynchronous,Windows異步套接字)的啟動(dòng)命令。是Windows下的網(wǎng)絡(luò )編程接口軟件Winsock1 或 Winsock2 里面的一個(gè)命令(Ps:Winsock 是由Unix下的BSD Socket發(fā)展而來(lái),是一個(gè)與網(wǎng)絡(luò )協(xié)議無(wú)關(guān)的編程接口)。為了在應用程序當中調用任何一個(gè)Winsock API函數,首先第一件事情就是必須通過(guò)WSAStartup函數完成對Winsock服務(wù)的初始化,因此需要調用WSAStartup函數。使用Socket的程序在使用Socket之前必須調用WSAStartup函數。該函數的第一個(gè)參數指明程序請求使用的Socket版本,其中高位字節指明副版本、低位字節指明主版本;操作系統利用第二個(gè)參數返回請求的Socket的版本信息。當一個(gè)應用程序調用WSAStartup函數時(shí),操作系統根據請求的Socket版本來(lái)搜索相應的Socket庫,然后綁定找到的Socket庫到該應用程序中。以后應用程序就可以調用所請求的Socket庫中的其它Socket函數了。函數定義如下:

  int WSAStartup ( WORD wVersionRequested, LPWSADATA lpWSAData );wVersionRequested

 ?、?wVersionRequested:一個(gè)WORD(雙字節)型數值,指定了應用程序需要使用的Winsock規范的最高版本。高位字節指出副版本(修正)號,低位字節指明主版本號。

⑵lpWSAData 指向WSADATA數據結構的指針,用來(lái)接收Windows Sockets實(shí)現的細節。

本函數必須是應用程序或DLL調用的第一個(gè)Windows Sockets函數。它允許應用程序或DLL指明Windows Sockets API的版本號及獲得特定Windows Sockets實(shí)現的細節。應用程序或DLL只能在一次成功的WSAStartup()調用之后才能調用進(jìn)一步的Windows Sockets API函數。

  為支持日后可能和Windows Sockets 1.1有功能上差異的Windows Sockets實(shí)現及應用程序,在WSAStartup()中規定了一個(gè)協(xié)議。WSAStartup()的調用方和Windows Sockets DLL互相通知對方它們可以支持的最高版本,并且互相確認對方的最高版本是可接受的。在WSAStartup()函數的入口,Windows Sockets DLL檢查了應用程序所需的版本。如果所需版本低于DLL支持的最高版本,則調用成功并且DLL在wHighVersion中返回它所支持的最高版本,在

  wVersion中返回它的高版本和wVersionRequested中的較小者。然后Windows Sockets DLL就會(huì )假設應用程序將使用wVersion.如果WSDATA結構中的wVersion域對調用方來(lái)說(shuō)不可接收,它就應調用WSACleanup()函數并且要么去另一個(gè)Windows Sockets DLL中搜索,要么初始化失敗。

  本協(xié)議允許Windows Sockets DLL和Windows Sockets應用程序共同支持一定范圍的Windows Sockets版本。如果版本范圍有重疊,應用程序就可以成功地使用Windows Sockets DLL。下列的圖表給出了WSAStartup()在不同的應用程序和Windows Sockets DLL版本中是如何工作的:

  應用程序版本 DLL版本 wVersionRequested wVersion wHighVersion 最終結果

  1.1 1.1 1.1 1.1 1.1 use 1.1

  1.0 1.1 1.0 1.1 1.0 1.0 use 1.0

  1.0 1.0 1.1 1.0 1.0 1.1 use 1.0

  1.1 1.0 1.1 1.1 1.1 1.1 use 1.1

  1.1 1.0 1.1 1.0 1.0 失敗

  1.0 1.1 1.0 -- -- WSAVERNOTSUPPORTED

  1.0 1.1 1.0 1.1 1.1 1.1 1.1 use 1.1

  1.1 2.0 1.1 2.0 1.1 1.1 use 1.1

2.0 1.1 2.0 1.1 1.1 失敗

返回值:0 成功。否則返回下列的錯誤代碼之一。注意通常依靠應用程序調用WSAGetLastError()機制獲得的錯誤代碼是不能使用的,因為Windows Sockets DLL可能沒(méi)有建立"上一錯誤"信息儲存的客戶(hù)數據區域。

  關(guān)于Windows Sockets提供者的說(shuō)明:

  每一個(gè)Windows Sockets應用程序必須在進(jìn)行其它Windows Sockets API調用前進(jìn)行WSAStartup()調用。這樣,本函數就可以用于初始化的目的。

  進(jìn)一步的說(shuō)明在WSACleanup()的說(shuō)明中有討論。

錯誤代碼

  WSASYSNOTREADY 指出網(wǎng)絡(luò )通信依賴(lài)的網(wǎng)絡(luò )子系統還沒(méi)有準備好。

  WSAVERNOTSUPPORTED 所需的Windows Sockets API的版本未由特定的Windows Sockets實(shí)現提供。

WSAEINVAL 應用程序指出的Windows Sockets版本不被該DLL支持。

(2)WSACleanup函數

int WSACleanup (void);

應用程序在完成對請求的Socket庫的使用后,要調用WSACleanup函數來(lái)解除與Socket庫的綁定并且釋放Socket庫所占用的系統資源。

WSAStartup應該與WSACleanup成對使用,WSAStartup的功能是初始化Winsock DLL,WSACleanup是來(lái)解除與Socket庫的綁定并且釋放Socket庫所占用的系統資源。 在Windows下,Socket是以DLL的形式實(shí)現的。在DLL內部維持著(zhù)一個(gè)計數器,只有第一次調用WSAStartup才真正裝載DLL,以后的 調用只是簡(jiǎn)單的增加計數器,而WSACleanup函數的功能則剛好相反,每調用一次使計數器減1,當計數器減到0時(shí),DLL就從內存中被卸載!因此,你 調用了多少次WSAStartup,就應相應的調用多少次的WSACleanup.

(3)gethostname()

  【函數原型】

int PASCAL FAR gethostname (char FAR * name, int namelen);

  【使用說(shuō)明】

  該函數可以獲取本地主機的主機名,其中:

  name:用于指向所獲取的主機名的緩沖區的指針。

  Namelen:緩沖區的大小,以字節為單位。

返回值:若無(wú)錯誤,返回0;否則,返回錯誤代嗎。

(4)gethostbyname()

  【函數原型】

struct hostent FAR * PASCAL FAR gethostbyname(const char FAR * name);

  【使用說(shuō)明】

  該函數可以從主機名數據庫中得到對應的"主機"。

  該函數唯一的參數name就是前面調用函數gethostname()得到的主機名。若無(wú)錯誤,剛返回一個(gè)指向hostent結構的指針,它可以標識一個(gè)"主機"列表。

   

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
WSAStartup與WSACleanup
WSASTARTUP
gethostname為什么返回錯誤
使用socket套接字時(shí)的兩點(diǎn)經(jīng)驗
用WINSOCK實(shí)現聊天室的VC++程序設計
Windows 網(wǎng)絡(luò )通信套接字技術(shù)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久