Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi WinSock-Problem (https://www.delphipraxis.net/1208-winsock-problem.html)

Chewie 1. Nov 2002 10:23


WinSock-Problem
 
Ich will mit Hilfe der WinSock-Schnittstelle eine Verbindung zu einem Server aufbauen. Die Verbindungsherstellung beginnt auch zum richtigen Host, aber leider zum falschen Port. Ich will zum Port 21 connecten, aber meine Firewall sagt mir, ich will zu 5367. Keine Ahnung ob das stimmt, aber jedenfalls kann die Verbindung nicht hergestellt werden (Fehler WSAECONNREFUSED). Folgender Code ist relevant:

Code:
Sock := Socket(AF_INET,SOCK_STREAM,PF_UNSPEC);
  ZeroMemory(@SockAddr,SizeOf(TSockAddr));
  SockAddr.sin_family := AF_INET;
  SockAddr.sin_port := 3333;
  SockAddr.sa_family := AF_INET;
  Bind(Sock,SockAddr,SizeOf(TSockAddr));
  ZeroMemory(@SockAddr,SizeOf(TSockAddr));
  SockAddr.sin_family := AF_INET;
  SockAddr.sin_port := 21;
  SockAddr.sin_addr.S_addr := host;
  if Connect(Sock,SockAddr,SizeOf(TSockAddr)) = 0 then
  begin
    recv(Sock,buf,Length(buf),0);
    log.Items.Add(buf);
  end
  else
  begin
    Error := WSAGetLastError;
    Form1.Caption := 'Es konnte keine Verbindung hergestellt werden: ' + IntToStr(Error);
  end;
  ShutDown(Sock,2);
  WSACleanUp;
Weiß einer Rat?

Salomon 1. Nov 2002 11:10

Hallo,
so wie ich das sehe hast du einiges doppelt in deinem Quellcode. Ich würde es mal so probieren:
Code:
Sock := Socket(AF_INET,SOCK_STREAM,0);
  ZeroMemory(@SockAddr,SizeOf(TSockAddr));

  SockAddr.sin_family     := AF_INET;
  SockAddr.sin_addr.S_addr := host;
  SockAddr.sin_port       := 21;  
 
  if Connect(Sock,SockAddr,SizeOf(TSockAddr)) = 0 then
  begin
    recv(Sock,buf,Length(buf),0);
    log.Items.Add(buf);
  end
  else
  begin
    Error := WSAGetLastError;
    Form1.Caption := 'Es konnte keine Verbindung hergestellt werden: ' + IntToStr(Error);
  end;
  ShutDown(Sock,2);
  WSACleanUp;
Ein gutes Tutorial zur Socket Programmierung findest du hier


Mfg Salomon

Chewie 1. Nov 2002 11:21

Ob man das bind() braucht oder nicht, weiß ich nicht, es macht aber keinen Unterschied. Nachwievor das gleiche Problem.

Chewie 1. Nov 2002 11:26

OK, das Tutorial ist gut. In dem Tutorial, das ich benutzt hab, hat ein Teil gefehlt. Aus
Code:
SockAddr.sin_port := (21);
muss ich
Code:
SockAddr.sin_port := htons(21);
machen, dann klappts. Vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 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