AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Aus IP und Port wieder DWord machen
Thema durchsuchen
Ansicht
Themen-Optionen

Aus IP und Port wieder DWord machen

Ein Thema von Kanne_Kaffe · begonnen am 7. Jan 2007 · letzter Beitrag vom 8. Jan 2007
Antwort Antwort
Kanne_Kaffe

Registriert seit: 10. Okt 2005
25 Beiträge
 
#1

Aus IP und Port wieder DWord machen

  Alt 7. Jan 2007, 22:24
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:
// (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;
Was habe ich hier falsch gemacht?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Aus IP und Port wieder DWord machen

  Alt 7. Jan 2007, 22:59
Moin Kanne_Kaffe,

inet_addr liefert die Bytes in umgekehrter Reihenfolge wieder zurück.
Ist das das Problem?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Kanne_Kaffe

Registriert seit: 10. Okt 2005
25 Beiträge
 
#3

Re: Aus IP und Port wieder DWord machen

  Alt 7. Jan 2007, 23:14
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;
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Aus IP und Port wieder DWord machen

  Alt 8. Jan 2007, 08:47
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
Klaus
  Mit Zitat antworten Zitat
Kanne_Kaffe

Registriert seit: 10. Okt 2005
25 Beiträge
 
#5

Re: Aus IP und Port wieder DWord machen

  Alt 8. Jan 2007, 09:38
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.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Aus IP und Port wieder DWord machen

  Alt 8. Jan 2007, 09:44
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
Klaus
  Mit Zitat antworten Zitat
Kanne_Kaffe

Registriert seit: 10. Okt 2005
25 Beiträge
 
#7

Re: Aus IP und Port wieder DWord machen

  Alt 8. Jan 2007, 09:54
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.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Aus IP und Port wieder DWord machen

  Alt 8. Jan 2007, 09:57
Was passiert denn wenn Du hier:

Delphi-Quellcode:
 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);
einfach einen dummy Wert zum Testen zuweist und nicht Deine Funktionen aufrufst ?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Kanne_Kaffe

Registriert seit: 10. Okt 2005
25 Beiträge
 
#9

Re: Aus IP und Port wieder DWord machen

  Alt 8. Jan 2007, 10:17
Hier war was faul:
Delphi-Quellcode:
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;
Aber gehen tut es leider immer noch nicht.
Delphi-Quellcode:
  iTmp := GetAddress(PAnsiChar(sLocalIp));
  Result.dwLocalAddr := iTmp; // hier knalls
iTmp ist Cadinal... Es Geht nicht.

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.
  Mit Zitat antworten Zitat
Kanne_Kaffe

Registriert seit: 10. Okt 2005
25 Beiträge
 
#10

Re: Aus IP und Port wieder DWord machen

  Alt 8. Jan 2007, 10:38
Freudentanz es geht!
hier war das Problem:
  GetMem(Result, SizeOf(Result)); Das fehle in meiner function!
Danke für die Denkanstösse!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz