我想通過Delphi 7中的GetExtendedTcpTable查看TCP和UDP協議的IPV6連接。我編寫了代碼來顯示連接信息。問題是我的連接狀態爲「0」。據我所知,有效狀態是1-12。下面是我的代碼,有人能指出這個錯誤。爲什麼我在GetExtendedTcpTable中連接狀態爲0
const
ANY_SIZE = 1;
type
PTMib_TCP6Row = ^TMib_TCP6Row;
TMib_TCP6Row = packed record
dwState : DWORD ;
LocalAddr : IN6_ADDR ;
dwLocalScopeId : DWORD ;
dwLocalPort : DWORD ;
RemoteAddr : IN6_ADDR ;
dwRemoteScopeId : DWORD ;
dwRemotePort : DWORD ;
dwProcessId : DWORD ;
end;
PTMIB_TCP6TABLE = ^TMIB_TCP6TABLE;
TMIB_TCP6TABLE = packed record
dwNumEntries : DWORD;
Table: array[0..ANY_SIZE - 1] of TMib_TCP6Row;
end;
function GetTCPEntries: Boolean;
var
tcpTable1: PTMIB_TCP6TABLE;
dwSize1, dwSize2, dwSize3, I: DWORD;
begin
Result := False;
dwSize1 := 0;
dwSize2 := 0;
dwSize3 := 0;
if GetExtendedTcpTable(nil, @dwSize1, False, AF_INET6, TCP_TABLE_OWNER_PID_ALL, 0) = ERROR_INSUFFICIENT_BUFFER then
begin
GetMem(tcpTable1, dwSize1);
GetExtendedTcpTable(tcpTable1, @dwSize1, False, AF_INET6, TCP_TABLE_OWNER_PID_ALL, 0);
dwSize2 := tcpTable1^.dwNumEntries;
for i := 0 to dwSize2-1 do
begin
//Form1.UpdateLog('State of connection = ' + IntTostr(tcpTable1.Table[i].dwState) + #13#10);
end;
FreeMem(tcpTable1, dwSize1);
end;
end;
dwState在我的情況下爲0。
我看到sysinternals程序「TCPView.exe」的輸出顯示連接狀態爲「Listening」,因此我的機器沒有任何問題。
幫助將不勝感激。 在此先感謝
@DavidHeffernan:我們已經成功地將這些定義用於IPV4。我只是將它們複製到這裏。不,C++頭文件不使用打包記錄。至於函數返回部分,它只是一個演示代碼。 – CyprUS 2013-03-14 10:38:58