Einzelnen Beitrag anzeigen

Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#1

Winsock Fehler ("ungültige" IP Adresse)

  Alt 23. Aug 2003, 17:57
Hi,

Der folgende Code soll ein RAW Socket erzeugen. Allerdings erhalte ich immer den Fehler: "Die angeforderte Adresse ist in diesem Kontext ungültig."

Die Variable "User" ist eine (100% gültige) externe IP Adresse.
"Port" ist die Nummer irgendeines Ports im gültigen Bereich.

Die exists bei den Socketfehlern fehlen absichtlich.

Delphi-Quellcode:
procedure TForm1.CreatePort(User: String);
var
    Port,i, AddrLength: Integer;
    aSocket: TSocket;
    sa: TSockAddrIn;
    recvto: Integer;
    dwBufferInLen, dwBytesReturned: DWord;
    dwBufferLen: Array[0..9] of DWord;
begin
try
  aSocket := socket(AF_INET, SOCK_RAW, IPPROTO_IP);
  if aSocket = INVALID_SOCKET then
  begin
    Form1.Statusbar1.simpleText:='Create: ' + SysErrorMessage
    (WSAGetLastError);
  end;
  recvto := 5000;
  if setsockopt(aSocket, SOL_SOCKET, SO_RCVTIMEO, @Char(recvto), Sizeof(recvto)) = SOCKET_ERROR then
  begin
    Form1.Statusbar1.simpleText := 'Setopt: ' + SysErrorMessage(WSAGetLastError);
  end;
  ZeroMemory(@sa,Sizeof(sa));
  sa.sin_family := AF_INET;
  sa.sin_port := htons(Port);
  sa.sin_addr.s_addr := inet_addr(Pchar(trim(User)));
  if bind(aSocket, @sa, Sizeof(sa)) = SOCKET_ERROR then
  begin
    Form1.Statusbar1.simpleText := 'Bind: ' + SysErrorMessage(WSAGetLastError);
  end;

If connect(aSocket, @sa, SizeOf(sa))=SOCKET_ERROR then
  begin
   Showmessage('Connect: ' + SysErrorMessage(WSAGetLastError));
   exit;
  end;
finally
 CloseSocket(aSocket);
end;
end;
Mit lokalen IP Adressen funktioniert es, aber nicht mit externen
Weiss jemand was ich hier falsch mache/nicht verstanden habe?

Gruß,
Dani
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat