![]() |
Aus IP und Port wieder DWord machen
Nabend
ich weiss gab es schon öfter, verstehen tu ich es trotzdem leider nicht :? Ich möchte auch einer IP und Port wieder einen Dword Wert erhalten die richtigen functionen habe ich, denke ich, nur versteh ich deren Anwendung nicht ganz:
Delphi-Quellcode:
Was habe ich hier falsch gemacht?
// (String) IP -> DWord
function GetAddress(FIpAdress: String): DWORD; begin Result := Inet_addr(@FIpAdress[1]); end; // (Integer) Port -> Dword function GetPort(FPort: Integer): DWORD; begin Result := WinSock.htonl(FPort); end; |
Re: Aus IP und Port wieder DWord machen
Moin Kanne_Kaffe,
inet_addr liefert die Bytes in umgekehrter Reihenfolge wieder zurück. Ist das das Problem? |
Re: Aus IP und Port wieder DWord machen
Hallo Christian,
Nein, denke ich jedenfalls nicht. Ich will eigendlich eine TCP verbidung beenden. Unddabei kommt es zur AV
Delphi-Quellcode:
type TSetTcpEntry= Function(pTcpRow: PMIB_TCPROW): DWORD; stdcall; type MIB_TCPROW = packed record dwState, dwLocalAddr, dwLocalPort, dwRemoteAddr, dwRemotePort: DWORD; end; PMIB_TCPROW = ^MIB_TCPROW; function CloseTCPConnection(pTcpRow: PMIB_TCPROW): Boolean; begin pTcpRow.dwState := MIB_TCP_STATE_DELETE_TCB; if pSetTcpEntry(pTcpRow) = NO_ERROR then Result := True else Result := False; end; function TForm1.GetTCPRow: PMIB_TCPROW; var I, X: Integer; S, sLocalIp, sRemoteIp: String; iLocalPort, iRemotePort: Cardinal; begin if ListView1.ItemIndex = -1 then exit; S := ListView1.Items.Item[ListView1.ItemIndex].SubItems[1]; X := Pos(':', S); sLocalIp := Copy(S, 1, X-1); iLocalPort := StrToInt( Copy(S, X+1, Length(S)) ); S := ListView1.Items.Item[ListView1.ItemIndex].SubItems[2]; X := Pos(':', S); sRemoteIp := Copy(S, 1, X-1); iRemotePort := StrToInt( Copy(S, X+1, Length(S)) ); Result.dwLocalAddr := GetAddress(PAnsiChar(sLocalIp)); // und hier kommt die AV Result.dwLocalPort := GetPort(iLocalPort); // functionen wie oben geschrieben Result.dwRemoteAddr := GetAddress(PChar(sRemoteIp)); Result.dwRemotePort := GetPort(iRemotePort); end; procedure TForm1.Schliessen1Click(Sender: TObject); begin if CloseTCPConnection(GetTCPRow) then showmessage('Verbindung geschlossen') else showmessage('Fehler'); end; |
Re: Aus IP und Port wieder DWord machen
Kann es sein , da PMIB_TCPROW ein Zeiger auf MIB_TCPROW ist
und moch kein Speicher alokiert wurde es kracht wenn Du in den Speicher schreiben möchtest? Grüße Klaus |
Re: Aus IP und Port wieder DWord machen
Das kann gut sein. Was muss ich verwenden. GetMem oder AllocMem und wie muss ich das Deklarieren TSockAddr oder so - das ist glaub ich mein Problem.
|
Re: Aus IP und Port wieder DWord machen
Bin mir da nicht 100% sicher, aber ich würde es mit new(PMIB_TCPROW) probieren.
Um keine Speicherfresser zu produzieren sollte der Speicher dann wieder, wenn er nicht mehr gebraucht wird mit dispose(PMIB_TCPROW) freigeben werden. Grüße Klaus |
Re: Aus IP und Port wieder DWord machen
Es kommt nicht zur AV bei der Verwendung von ColoseConnection. Soweit bin ich noch gar nicht.
Wenn ich die function GetAddress wie ober beschrieben verwende kommt es zu AV. |
Re: Aus IP und Port wieder DWord machen
Was passiert denn wenn Du hier:
Delphi-Quellcode:
einfach einen dummy Wert zum Testen zuweist und nicht Deine Funktionen aufrufst ?
Result.dwLocalAddr := GetAddress(PAnsiChar(sLocalIp)); // und hier kommt die AV
Result.dwLocalPort := GetPort(iLocalPort); // functionen wie oben geschrieben Result.dwRemoteAddr := GetAddress(PChar(sRemoteIp)); Result.dwRemotePort := GetPort(iRemotePort); Grüße Klaus |
Re: Aus IP und Port wieder DWord machen
Hier war was faul:
Delphi-Quellcode:
Aber gehen tut es leider immer noch nicht.
Falsch^^
function GetPort(FPort: Integer): DWORD; begin Result := WinSock.htonl(FPort); end; // richtig ist... function GetPort(FPort: Integer): DWORD; begin Result := WinSock.ntohs(FPort); end;
Delphi-Quellcode:
iTmp ist Cadinal... Es Geht nicht.
iTmp := GetAddress(PAnsiChar(sLocalIp));
Result.dwLocalAddr := iTmp; // hier knalls Aber ich weiss jetzt das meine funtionen in ordnung sind, weil ich im "Hin-Und-Her-Modus" die richtigen Ergebnisse bekomme nur lässt es sich nicht dwLocalAdress zuweisen. |
Re: Aus IP und Port wieder DWord machen
Freudentanz es geht!
hier war das Problem:
Delphi-Quellcode:
Das fehle in meiner function!
GetMem(Result, SizeOf(Result));
Danke für die Denkanstösse! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz