![]() |
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:
Dankeuses 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; ... .. . |
Re: WinSock Programmierung
Weil er auf eine Verbindung wartet!
|
Re: WinSock Programmierung
Und wie bekomm ich es hin, dass sich das Programm nicht "totwartet"?
|
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. |
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. |
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; ... .. . |
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. |
Re: WinSock Programmierung
Jo mach ich!
Vielen Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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