Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi WinSock Programmierung (https://www.delphipraxis.net/20079-winsock-programmierung.html)

SleepyMaster 13. Apr 2004 12:52


WinSock Programmierung
 
Hi ihrs
Kann mir mal jemand vielleicht helfen und mir sagen, warum das Programm bei dem Befehl "connect" hängen bleibt und nicht weiterarbeitet? (Es gibt auch keinen Fehler)

Delphi-Quellcode:

uses
  WinSock;

procedure TForm1.Button1Click(Sender: TObject);
var
  wsaData: TWSADATA;
  wVersionRequested:WORD ;
  pTarget : Phostent;
  sock: sockaddr_in;
  targetip: Pchar;
  port,bufsize: integer;
  s: TSocket;
begin
  wVersionRequested := MAKEWORD(1,1);
  if (WSAStartup(wVersionRequested,wsaData) < 0) then
    exit;

  targetip := '127.0.0.1';
  port := 135;
  bufsize := 512;

  s := socket(AF_INET, SOCK_STREAM, 0);
  if(s=INVALID_SOCKET) then
    begin
    ShowMessage('Socket Fehler');
    exit;
    end;
  pTarget := gethostbyname(targetip);

  if pTarget = nil then
    begin
    ShowMessage('Fehler beim auflösen des Hostnamens');
    exit;
    end;

  Move(pTarget^, sock.sin_addr.s_addr, sizeof(pTarget^));
  sock.sin_family := AF_INET;
  sock.sin_port := htons(port);

  if connect(s, sock, sizeof (sock))=SOCKET_ERROR then //hier bleibt das Programm "hängen"
    begin
    ShowMessage('Fehler beim verbinden zum Host');
    exit;
    end;
...
..
.
Danke

neolithos 13. Apr 2004 13:58

Re: WinSock Programmierung
 
Weil er auf eine Verbindung wartet!

SleepyMaster 13. Apr 2004 14:58

Re: WinSock Programmierung
 
Und wie bekomm ich es hin, dass sich das Programm nicht "totwartet"?

neolithos 13. Apr 2004 15:09

Re: WinSock Programmierung
 
Eigentlich sollte er nach 30sec das warten abrechen.

- Entweder du packst das in einen Thread und wartest eine gewisse Zeit.
- oder du arbeitest im Non-Blocking-Mode
- oder du benutzt die WSA-Funktionen
- oder du findest heraus ob es beim Blocking-Mode auch so etwas wie ein TimeOut setzbar ist.

SleepyMaster 13. Apr 2004 15:12

Re: WinSock Programmierung
 
Sorry! Das war jetzt etwas anders gemeint:

In dem Code muss ein Fehler drin sein! Der Port zu dem ich mich verbinde ist vorhanden. Deshalb söllte er sich ziemlich direkt damit verbinden.

SleepyMaster 13. Apr 2004 15:14

Re: WinSock Programmierung
 
OK! Habs schon hinbekommen!

Delphi-Quellcode:
uses
  WinSock;

procedure TForm1.Button1Click(Sender: TObject);
var
  wsaData: TWSADATA;
  wVersionRequested:WORD ;
  pTarget : Phostent;
  sock: sockaddr_in;
  targetip: Pchar;
  port,bufsize: integer;
  s: TSocket;
begin
  wVersionRequested := MAKEWORD(1,1);
  if (WSAStartup(wVersionRequested,wsaData) < 0) then
    exit;

  targetip := '127.0.0.1';
  port := 135;
  bufsize := 512;

  s := socket(AF_INET, SOCK_STREAM, 0);
  if(s=INVALID_SOCKET) then
    begin
    ShowMessage('Socket Fehler');
    exit;
    end;
  pTarget := gethostbyname(targetip);

  if pTarget = nil then
    begin
    ShowMessage('Fehler beim auflösen des Hostnamens');
    exit;
    end;

  sock.sin_addr.s_addr:=PDWord(pTarget.h_addr_list^)^;
  sock.sin_family := AF_INET;
  sock.sin_port := htons(port);

  if connect(s, sock, sizeof (sock))=SOCKET_ERROR then //hier bleibt das Programm "hängen"
    begin
    ShowMessage('Fehler beim verbinden zum Host');
    exit;
    end;
...
..
.

neolithos 13. Apr 2004 15:20

Re: WinSock Programmierung
 
Schade, ich hatte es auch gerade gefunden.

Ersetz vielleicht noch bei s := socket( ... die 0 durch IPPROTO_TCP, denn ich vermute das du dieses Protokoll verwenden willst.

SleepyMaster 13. Apr 2004 15:24

Re: WinSock Programmierung
 
Jo mach ich!

Vielen Dank!


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