AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi WinSock Programmierung
Thema durchsuchen
Ansicht
Themen-Optionen

WinSock Programmierung

Ein Thema von SleepyMaster · begonnen am 13. Apr 2004 · letzter Beitrag vom 13. Apr 2004
Antwort Antwort
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#1

WinSock Programmierung

  Alt 13. Apr 2004, 13:52
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
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: WinSock Programmierung

  Alt 13. Apr 2004, 14:58
Weil er auf eine Verbindung wartet!
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#3

Re: WinSock Programmierung

  Alt 13. Apr 2004, 15:58
Und wie bekomm ich es hin, dass sich das Programm nicht "totwartet"?
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#4

Re: WinSock Programmierung

  Alt 13. Apr 2004, 16:09
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.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#5

Re: WinSock Programmierung

  Alt 13. Apr 2004, 16:12
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.
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#6

Re: WinSock Programmierung

  Alt 13. Apr 2004, 16:14
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;
...
..
.
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#7

Re: WinSock Programmierung

  Alt 13. Apr 2004, 16:20
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.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#8

Re: WinSock Programmierung

  Alt 13. Apr 2004, 16:24
Jo mach ich!

Vielen Dank!
  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 07:49 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