Entwickler-Ecke

Internet / Netzwerk - TCP/IP mit Delphi 4


Peter18 - So 22.02.15 19:23
Titel: TCP/IP mit Delphi 4
Ein freundliches Hallo an alle,

ich suche den Einstieg in eine kleine Client / Server Programmierung zum Austausch von Informationen über Netzwerk. Delphi 4 bietet in der Hilfe nicht viel an. Ich hoffe daher jemand hat einen Tipp, wie ich das anfangen kann.

Die Sache soll etwa folgendermaßen aussehen:

Es gibt sicher Systemschnittstellen, über die diese Dinge laufen, die bei Delphi 4 noch nicht dabei sind und die ich mir importieren oder deklarieren kann. Ich hoffe jemand hat einen Tipp wie ich anfangen kann.

Grüße von der Nordsee

Peter


jaenicke - So 22.02.15 21:07

Indy mit TIdTcpServer und TIdTcpClient wären meine erste Wahl, aber ich weiß nicht, ob du noch eine Version von Indy findest, die mit Delphi 4 funktioniert.
Du könntest natürlich auch Embarcadero mal nach einem Key für Turbo Delphi Explorer fragen [https://aerodactyl.wordpress.com/2013/02/24/kostenlose-delphi-version-aktiv-2013/], da gehen die aktuellen Indyversionen und ich glaube es war auch schon Indy dabei.

Ansonsten müsste auch bei Delphi 4 TClientSocket und TServerSocket dabei sein. Damit geht das auch.


Peter18 - Mo 23.02.15 12:47

Hallo jaenicke,

Danke für Deine Antwort! auf Turbo Delphi würde ich nur ungern umsteigen, da ich mich gerade in die Eigenschaften von Delphi 4 eingearbeitet habe. Die Chance, dass bei der Umstellung böse Überraschungen auf mich warten scheint mir zu groß, weil ich mit Delphi 4 schon ziemlich getrixt habe und das, was ich machen will vielleicht mit einigen wenigen Deklarationen oder dem Import der richtigen DLL schon erledigt ist.

TClientSocket und TServerSocket sind bei meiner Version nicht dabei.

Grüße von der Nordsee

Peter


Delphi-Laie - Mo 23.02.15 18:50

Angehängtes archiviertes Delphi-Projekt - das nicht ich programmierte - stellt TCP-Funktionen für Delphi 4 zur Verfügung. M.E. ist es ein wenig schlampig programmiert, denn die Warnungen beim Compilieren sind doch ziemlich zahlreich, aber mit meinen Änderungen und Korrekturen halte ich mich lieber zurück. Funktionieren tut es ja auch in dieser hier vorliegenden Version.

Mit ein wenig "Abspecken" ist dieses Projekt auch mit Delphi 3 und sogar Delphi 2 compilierbar.


jaenicke - Mo 23.02.15 21:33

Die Warnungen bezüglich nicht initialisierter Variablen sind teilweise nicht weiter schlimm (pBuf, denn bei Übergabe von 0 als zweitem Parameter sollte der Wert nicht verwendet werden), aber manche können böse enden (NumEntries, ...)...


Peter18 - Di 24.02.15 12:09

Hallo Delphi-Laie, hallo jaenicke,

Dank Euch für Eure Antworten! Ich werde mir wahrscheinlich die Dinge heraussuchen, die ich für mein Vorhaben brauche, also die Verbindung zum Netzwerk. Die Protokollierung funktioniert anscheinend ganz gut. Ich werde es genauer prüfen und dann Berichten.

Weitere Infos zu dem Thema sind auf jeden Fall willkommen!

Grüße von der Nordsee

Peter


Peter18 - Di 24.02.15 13:42

Ein freundliches Hallo an allle,

eine erste grobe Sichtung hat ergeben, dass in meinem Delphi 4 mehr Schnittstellen stecken, als in der Hilfe dokumentiert sind. Die "IpHlpApi" ist zwar da, aber nicht in der Hilfe beschrieben.

Das Beispiel von Delphi-Laie enthält Funktionen, für grundlegende Netzwerk-Daten. Unter https://msdn.microsoft.com/en-us/library/windows/desktop/aa366351%28v=vs.85%29.aspx Sind eine unmenge Funktionen dazu aufgeführt. Eine grobe Sichtung hat noch keinen Plan ergeben, ob Funktionen für Client- - Server-Verbindungen dabei sind. (Listener einrichten, Abfragen senden) Werde mich da durch wühlen.

Falls jemand einen Tipp oder ein Beispiel hat, wäre ich sehr dankbar. Das erleichtert den Einstieg ungemein!

Grüße von der Nordsee

Peter


Peter18 - Di 24.02.15 19:22

Ein freundliches Hallo an allle,

so, wie es bisher aussieht, sind in der Unit "IpHlpApi" nur tcp/ip Funktionen enthalten. Für Client/Server brauche ich offenbar die "wsock32.dll". Weiß jemand in welcher Unit die Deklarationen sind? Vielleicht sind sie ja dabei und man muß nur wissen wo. Importieren geht jedenfalls nicht.

Grüße von der Nordsee

Peter


Narses - Di 24.02.15 20:15

Moin!

user profile iconPeter18 hat folgendes geschrieben Zum zitierten Posting springen:
wie es bisher aussieht, sind in der Unit "IpHlpApi" nur tcp/ip Funktionen enthalten.
Das ist die IP-Helper-API [https://msdn.microsoft.com/de-de/library/windows/desktop/aa366073%28v=vs.85%29.aspx], das hat direkt mit TCP/IP erstmal weniger was zu tun. ;)

user profile iconPeter18 hat folgendes geschrieben Zum zitierten Posting springen:
Für Client/Server brauche ich offenbar die "wsock32.dll". Weiß jemand in welcher Unit die Deklarationen sind?
Was du suchst ist die Socket-API von Windows, konkret WinSock2 [https://msdn.microsoft.com/de-de/library/windows/desktop/ms740673%28v=vs.85%29.aspx].

Saug dir mal das hier [http://jedi-apilib.sourceforge.net/win32api_current.7z] und dann schau in die JwaWinsock2.pas rein. :les: :think:

cu
Narses


Peter18 - Mi 25.02.15 13:45

Hallo Narses,

danke auch für Deine Antwort. Aber eine kleine Anmerkung kann ich mir doch nicht verkneifen:
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Das ist die IP-Helper-API, das hat direkt mit TCP/IP erstmal weniger was zu tun.

Stimmt nicht ganz: Hier werden Protokolle verwendet wie TCP, UDP und ICMP, also die Protokolle aus diesem Bereich. Siehe: https://msdn.microsoft.com/en-us/library/windows/desktop/aa366071%28v=vs.85%29.aspx
Die Winsock verwendet u.a. HTTP.

Die "JwaWinsock2.pas" ist genau richtig, nochmals danke. Nun fehlt nur noch das Prozedere. Ich habe zwar eine Beschreibung gefunden, aber die setzt nicht auf der Winsock auf. Vielleicht genügt sie, aber wenn jemand eine gute Beschreibung hat, die auf der Winsock aufsetzt wär ich sehr dankbar.

In einer Beschreibung ist von "TServerSocket und TClientSocket" die Rede. Vielleicht gibt es die ja auch bei Delphi 4 aber was muß ich dann bei "uses" eintragen??? Die Hilfe schweigt sich aus!

Grüße von der Nordsee

Peter


Narses - Mi 25.02.15 14:02

Moin!

user profile iconPeter18 hat folgendes geschrieben Zum zitierten Posting springen:
Hier werden Protokolle verwendet wie TCP, UDP und ICMP, also die Protokolle aus diesem Bereich.
Ja, sicher, was hast du bei einer IP-Protokoll-Helper-API denn erwartet. :nixweiss: ;) Damit kannst du aber nicht "Daten übertragen" (jedenfalls nicht in dem Sinne, den du gesucht hast :arrow: Sockets).

user profile iconPeter18 hat folgendes geschrieben Zum zitierten Posting springen:
Die "JwaWinsock2.pas" ist genau richtig, nochmals danke. Nun fehlt nur noch das Prozedere.
Als ich das letzte Mal zu dem Thema ins MSDN geschaut habe, stand da noch alles drin, was man wissen muss. :les: :idea: Nun, WSA direkt macht keinen Spaß, aber das wolltest du ja so. :?

user profile iconPeter18 hat folgendes geschrieben Zum zitierten Posting springen:
In einer Beschreibung ist von "TServerSocket und TClientSocket" die Rede. Vielleicht gibt es die ja auch bei Delphi 4 aber was muß ich dann bei "uses" eintragen?
Das sollte die Unit ScktComp(.dcu) sein (ist sie zumindest bei D6+). Ist deine Suchfunktion im Explorer kaputt? :lupe: :lol:

cu
Narses


Peter18 - Mi 25.02.15 18:31

Hallo Narses,

nochmals Dank für Deine Antwort.

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Ja, sicher, was hast du bei einer IP-Protokoll-Helper-API denn erwartet.
Ich hatte nichts erwartet sondern mir den Hinweis von "Delphi-Laie" angesehen. Da ich dort nichts passendes gefunden habe, suchte ich nach anderen Möglichkeiten. Man muß ja erst mal reinsehen um zu wissen was da alles drinnen steckt!

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Als ich das letzte Mal zu dem Thema ins MSDN geschaut habe, stand da noch alles drin, was man wissen muss.
Kann ja durchaus sein, aber bisher habe ich dort nur die Beschreibung der Funktionen gefunden, aber keine Beschreibung für den Aufbau einer Verbindung. Natürlich kann man viel ausprobieren, aber warscheinlich gibt es irgentwo eine Beschreibung welche Schritte notwendig sind. Um die zu finden braucht man aber das richtige Stichwort! Falls Du weißt wo oder wie sie zu finden ist, wäre ein entsprechender Hinweis außerordentlich liebenswürdig!

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Das sollte die Unit ScktComp(.dcu) sein (ist sie zumindest bei D6+). Ist deine Suchfunktion im Explorer kaputt?
Die ist nicht kaputt! Aber 1. braucht man das richtige Stichwort (Siehe Oben!) und 2. heißt es noch lange nicht, dass man dann etwas findet. Z.B. such mal nach "jpeg" oder "winsock". Ich finde nichts, obwohl der Compiler diese Stichworte unter "uses" akzeptiert! Da sind wohl die .pas - Dateien nicht geliefert worden und Borland hat diese Units dummerhafter weise binär verpack. Sonst brauchte ich ja hier auch nicht so dumme Fragen zu stellen!

"ScktComp" akzeptiert der Compiler bei "Uses" nicht. Entweder hat die Unit einen anderen Namen oder sie ist nicht dabei! (Leider habe ich keine Liste der vorhandenen Units, das würde die Sache erheblich vereinfachen!)

Grüße von der Nordsee

Peter


jaenicke - Mi 25.02.15 19:54

user profile iconPeter18 hat folgendes geschrieben Zum zitierten Posting springen:
Da sind wohl die .pas - Dateien nicht geliefert worden und Borland hat diese Units dummerhafter weise binär verpack. Sonst brauchte ich ja hier auch nicht so dumme Fragen zu stellen!
Die sind nur ab der Professional dabei, nicht aber bei der Delphi 4 Standard. Bei Turbo Delphi Explorer waren sie allerdings auch dabei soweit ich mich erinnere, aber die möchtest du ja nicht.

Wenn ich jedenfalls in Delphi 4 Professional auf den Reiter Internet schaue, sehe ich als erstes dort ClientSocket und ServerSocket. Wenn ich TClientSocket eingebe und F1 drücke, kommt auch die Hilfe dazu. Wenn du die Standard Edition hast, weiß ich nicht, ob es da genauso aussieht.

Außerdem ist bei meinem Delphi 4 in den Demos ein Chat als Beispiel dabei. (Unter C:\Programme\Borland\Delphi4\Demos\Internet\Chat)


Peter18 - Do 26.02.15 12:22

Hallo jaenicke,

Dank für Deine Antwort!

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Bei Turbo Delphi Explorer waren sie allerdings auch dabei soweit ich mich erinnere, aber die möchtest du ja nicht.
Wenn ich sie kriegen kann, nehm ich sie natürlich. Man kann ja nur davon lernen!

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich jedenfalls in Delphi 4 Professional auf den Reiter Internet schaue, sehe ich als erstes dort ClientSocket und ServerSocket. Wenn ich TClientSocket eingebe und F1 drücke, kommt auch die Hilfe dazu. Wenn du die Standard Edition hast, weiß ich nicht, ob es da genauso aussieht.
Leider sind etliche vorhandene Units nicht in der Oberfläche eingetragen und nicht in der Hilfe, aber ich kann sie verwenden. Das macht die Sache ein wenig kompliziert.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Außerdem ist bei meinem Delphi 4 in den Demos ein Chat als Beispiel dabei. (Unter C:\Programme\Borland\Delphi4\Demos\Internet\Chat)
Leider ist der ganze Ordner "Internet" nicht vorhanden, sonst hätte ich da schon gestöbert und mir angestehen wie die Dinge dort programmiert sind.

Grüße von der Nordsee

Peter


jaenicke - Do 26.02.15 16:52

user profile iconPeter18 hat folgendes geschrieben Zum zitierten Posting springen:
Leider ist der ganze Ordner "Internet" nicht vorhanden, sonst hätte ich da schon gestöbert und mir angestehen wie die Dinge dort programmiert sind.
Dann bleibt dir wirklich nicht viel mehr als die reine API. Das macht nicht wirklich Spaß und der Aufwand ist ziemlich hoch...
Möglich ist das natürlich...

user profile iconPeter18 hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich sie kriegen kann, nehm ich sie natürlich. Man kann ja nur davon lernen!
Eine nette Mail an Embarcadero Deutschland wie in dem Link geschrieben sollte reichen.

Und mit Turbo Delphi kommst du auf jeden Fall deutlich schneller und vor allem einfacher ans Ziel.


Peter18 - Mo 02.03.15 14:52

Hallo jaenicke,

nochmals Dank für die Antwort! Ich hatte nun die Idee, Turbo Delphi auf einem anderen Rechner zu installieren (XP) und dort herauszufinden in welchen Units die nötigen Funktionen enthalten sind und sie dann in Delphi 4 zu verwenden.

Nur, die Hilfe funktioniert nicht. HTMLHelp2Viewer und DocExplorer machen schwierigkeiten. Liegt das an XP oder fehlt da noch irgend etwas? Hoffe jemand hat einen Tipp.

Grüße von der Nordsee

Peter


jaenicke - Mo 02.03.15 16:08

Die Installation von Delphi installiert eigentlich alles Notwendige (insbesondere .NET). Und XP ist genau richtig für Turbo Delphi, weil es genau zu der Zeit auch entwickelt wurde.

Was bedeutet denn "machen schwierigkeiten"? Fehlermeldungen?


Peter18 - Mo 02.03.15 17:12

Hallo jaenicke,

und nochmals Dank!

"Microsoft Document Explorer hat ein Problem festgestellt." Das sind die Details:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
+ $21[531C601A]{htmlhelp2100.bpl} HTMLHelp2Viewer.HTMLHelp2Viewer.THTMLHelp2Viewer.InitDocExplorer (Line 812, "HTMLHelp2Viewer.pas" + 8) + $21
 + $3[531C6096]{htmlhelp2100.bpl} HTMLHelp2Viewer.HTMLHelp2Viewer.THTMLHelp2Viewer.GetDocExplorer (Line 820, "HTMLHelp2Viewer.pas" + 2) + $3
 + $16[531C5E8A]{htmlhelp2100.bpl} HTMLHelp2Viewer.HTMLHelp2Viewer.THTMLHelp2Viewer.DisplayTopic (Line 799, "HTMLHelp2Viewer.pas" + 10) + $16
 + $8[51F7CEFC]{rtl100.bpl  } HelpIntfs.HelpIntfs.THelpManager.ShowTopicHelp (Line 699, "HelpIntfs.pas" + 13) + $8
 + $14[52079C69]{vcl100.bpl  } Forms.Forms.TApplication.HelpJump (Line 7989, "Forms.pas" + 8) + $14
 + $F[00413E7A]{bds.exe     } AppMain.AppMain.TAppBuilder.cbDesktopKeyPress (Line 5564, "ui\AppMain.pas" + 4) + $F
 + $7[51F5FEFF]{rtl100.bpl  } Classes.Classes.TBasicAction.Execute (Line 11070, "classes.pas" + 3) + $7
 + $C[520586C8]{vcl100.bpl  } Controls.Controls.TControl.Perform (Line 5018, "Controls.pas" + 5) + $C
 + $1F[5205C56D]{vcl100.bpl  } Controls.Controls.TWinControl.IsControlMouseMsg (Line 7130, "Controls.pas" + 15) + $1F
 + $6[520B6029]{vcl100.bpl  } ComCtrls.ComCtrls.TToolBar.WndProc (Line 19404, "ComCtrls.pas" + 80) + $6
 + $6[5205C1A4]{vcl100.bpl  } Controls.Controls.TWinControl.MainWndProc (Line 7021, "Controls.pas" + 3) + $6
 + $0[51F60BC0]{rtl100.bpl  } Classes.Classes.StdWndProc (Line 11572, "classes.pas" + 8) + $0
 + $6A[7E368731]{USER32.dll  } GetDC + $6A
 + $14A[7E368811]{USER32.dll  } GetDC + $14A
 + $122[7E3689C8]{USER32.dll  } GetWindowLongW + $122
 + $A[7E3696C2]{USER32.dll  } DispatchMessageA + $A

Grüße von der Nordsee

Peter


Peter18 - Di 03.03.15 16:24

Ein freundliches Hallo an alle,

noch immer funktioniert die Hilfe nicht. Nach einigen Updates, gegen die sich der Rechner verzweifelt gewehrt hat, und weiteren Versuchen habe ich neue Informationen zu dem Problem gefunden:

In "bds:/JS/projektActions.js" in der Funktion

JavaScript-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function openDExplore(aLink)
{
  var session;
  session = new ActiveXObject("DExplore.AppObj");
  session.SetCollection("ms-help://borland.bds4""");
  session.Contents();
  session.DisplayTopicFromUrl(aLink);
}

tritt der Fehler bei "new ActiveXObject("DExplore.AppObj")" auf. Der "Internet Explorer 6" weigerte sich seinen Dienst aufzunehmen und behauptete es wäre eine neuere Version installiert. Bisher habe ich in der Sache noch keine nützliche Information finden können, außer folgender Info: Auf einer Seite wird der Aufruf mit "ProgID = DExplore.AppObj.7" beschrieben. Eine Suche in der Systemdatenbank ergab, "DExplore" taucht zwar auf, aber nicht als Klasseneintrag!

Hoffe jemand hat einen Tipp!

Grüße von der Nordsee

Peter


Peter18 - Di 03.03.15 19:37

Ein freundliches Hallo an alle,

inzwischen habe ich die angegebenen nowendigen Komponenten rauf und runter installiert. Delphi weigert sich mit konstanter Bosheit die Hilfe anzuzeigen! Die Klasse fehlt noch immer. Inzwischen hab eine weitere Info zu diesem Thema gefunden in der eine "MSXML SDK" installiert wird. Dumm nur, dass ein Download derselben bei MS nicht funktionierte (Kam nix). Es sieht fast so aus, als ob der Fehler damit zusammenhängt. Hat jemand einen vertrauenswürdigen Link um an diese fehlende Klasse zu kommen oder weiß was da noch fehlt??

Grüße von der Nordsee

Peter


jaenicke - Di 03.03.15 20:04

user profile iconPeter18 hat folgendes geschrieben Zum zitierten Posting springen:
Der "Internet Explorer 6" weigerte sich seinen Dienst aufzunehmen und behauptete es wäre eine neuere Version installiert.
Hast du denn da eine neuere Version installiert? Mit dem Internet Explorer hängen einige Systemkomponenten zusammen, die von anderen Tools auch genutzt werden. Deshalb sollte der möglichst auch aktualisiert werden, auch wenn man ihn ggf. nicht nutzt.


Peter18 - Mi 04.03.15 18:17

Hallo jaenicke,

danke für die Antwort. Versuche schon die ganze Zeit herauszufinden warum der Registryeintrag fehlt. Habe verschiedene Komponenten neu installiert und auch Delphi, doch ohne Erfolg.

Durch irgend ein Update ist der "Internet Explorer 7" (zumindest behauptet er 7 zu sein) da drauf gekommen, aber die Schnittstelle ist nicht da, zumindest nicht registriert. Installieren statt Update?

Grüße von der Nordsee

Peter


Peter18 - Fr 06.03.15 17:32

Ein freundliches Hallo an alle,

alle Versuche die Hilfe in Gang zu bringen sind bisher fehlgeschlagen. Den Internetexplorer möchte ich lieber nicht entfernen, da ich nicht sicher bin ob dann nicht irgend ein Programm abstürzt.

Vielleicht kann ja jemand die notwendigen Einträge für die Schnittstelle exportieren. Dann kann ich feststellen, ob die Schnittstelle von den Updates eingerichtet, aber nicht registriert wurde. Es gibt zwar Informationen zu dem Thema, aber offenbar sind sie unvollständig.

Grüße von der Nordsee

Peter


Martok - Fr 06.03.15 21:05

Moin,

um nochmal auf die Ausgangsfrage zurück zu kommen: noch mit D4 funktionieren wird die ICS [http://www.overbyte.be/frame_index.html] (grausige Webseite, kann man nicht direkt verlinken, links unter 'Products' 'ICS' anklicken). Die Version von 2009 unterstützt laut der Beschreibung noch D4. Zur Verwendung finden sich dort viele Beispiele und Demoprojekte. Hab ich damals auch verwendet und es funktionierte sehr gut.

Viele Grüße,
Martok


Peter18 - Mo 09.03.15 12:11

Hallo Martok,

Danke für Deine Atwort, ein sehr guter Tipp! Nach erster Sichtung sind dort einige interessante Sachen drin. Bei ersten Versuchen mit den Projektdateien konnte ich aber die Formulare nicht mit Delphi 4 laden. Werde noch weiter prüfen und dann Berichten.

Grüße von der sonnigen Nordsee

Peter


Peter18 - Di 24.03.15 13:11

Ein freundliches Hallo an alle,

leider ist es mir bisher noch nicht gelungen, mit all den Beispielen und Units, etwas lauffähiges hin zu kriegen. Aber bei all den Versuchen und Internetrecherchen bin ich durch Zufall auf die richtigen Stichworte gestoßen, die auch Grundlagen liefern. Bei MS gibt es ja sehr viele Infos, doch sie zu finden ist nicht so einfach, vor allem sie später wieder zu finden.

Daher für alle Interessierten hier die Links:
WinSock.pas:
Allgemeines zum Thema Netzwerk:
https://msdn.microsoft.com/en-us/library/windows/desktop/ee663286%28v=vs.85%29.aspx
WinSock: Getting started:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms737520%28v=vs.85%29.aspx
WinSock: Programmbeispiele (C++):
https://msdn.microsoft.com/en-us/library/windows/desktop/ms737889%28v=vs.85%29.aspx

WinNet.pas:
Übersicht:
https://msdn.microsoft.com/en-us/library/windows/desktop/ee663286%28v=vs.85%29.aspx
Beispiel:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364640%28v=vs.85%29.aspx

Grüße von der sonnigen Nordsee

Peter


Peter18 - Fr 27.03.15 14:50

Ein freundliches Hallo an alle,

Mit den Beispielen und der Beschreibung habe ich inzwischen etwas zu Stande gebracht, (quick and dirty) um erst mal zu sehen wie es geht. Es muß aber noch etwas falsch laufen! Vielleicht ein falsch übergebener Parameter? Der Server lauft bis "CSock := accept( SSock, Nil, Nil );" Hier scheint er in einer Schleife zu hängen. Eine Absturzmeldung gibt es nicht, aber vielleicht läuft er ja in die Wüste.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
procedure TForm1.Button1Click(Sender: TObject);      // Verbinden
var
  VerR    : word;
  WSADATA : TWSAData;
  Res     : Integer;
  hints   : PAddrInfo;
  ARes    : PAddrInfo;

begin
  VerR := 2;
  Res := WSAStartup( VerR, WSADATA );
  if Res = 0 then
  begin
    hints             := AllocMem( SizeOf( TAddrInfo ) );
    ARes              := AllocMem( SizeOf( TAddrInfo ) );
    hints.ai_flags    := 0;
    hints.ai_family   := AF_INET;     // Internetprotokoll
    hints.ai_socktype := SOCK_STREAM;
    hints.ai_protocol := IPPROTO_TCP;
    hints.ai_flags    := AI_PASSIVE;

    // Resolve the server address and port
    Res := getaddrinfo(Nil, PChar( Edit2.Text ), hints, ARes );
    if Res = 0 then
    begin
      // Create a SOCKET for connecting to server
      SSock := socket( ARes.ai_family, ARes.ai_socktype, ARes.ai_protocol );
      if SSock <> INVALID_SOCKET then
      begin
        // Setup the TCP listening socket
        Res := bind( SSock, ARes.ai_addr^, ARes.ai_addrlen );
        if Res <> SOCKET_ERROR then
        begin
          freeaddrinfo( ARes );
          Res := listen( SSock, SOMAXCONN );
          if Res = 0 then
          begin
            // Accept a client socket
            CSock := accept( SSock, NilNil );    
            if CSock <> INVALID_SOCKET then
            begin
              // No longer need server socket
              closesocket( SSock );
              // Receive until the peer shuts down the connection

            end
            else
            begin
              Memo1.Lines.Add( 'Fehler Erstellen des Clientports: ' + IntToStr( WSAGetLastError ) );
              closesocket( SSock );
              WSACleanup;
            end;
          end
          else  // listen ServerSock
          begin
            Memo1.Lines.Add( 'Fehler Portprüfung: ' + IntToStr( WSAGetLastError ) );
            closesocket( SSock );
            WSACleanup;
          end;
        end
        else  // bind
        begin
          Memo1.Lines.Add( 'Fehler beim Binden: ' + IntToStr( WSAGetLastError ) );
          freeaddrinfo( ARes );
          closesocket( SSock );
          WSACleanup;
        end;
      end
      else    // socket
      begin
        Memo1.Lines.Add( 'Fehler beim Erstellen des Socket : ' + IntToStr( WSAGetLastError ) );
        freeaddrinfo( ARes );
        WSACleanup;
      end;
    end
    else      // getaddrinfo
    begin
      Memo1.Lines.Add( 'Fehler bei der Portprüfung: ' + IntToStr( Res ) );
      WSACleanup;
    end;
  end
  else        // WSAStartup
  begin
    Memo1.Lines.Add( 'Initialisierungsfehler: ' + IntToStr( Res ) );
  end;
end;

Ich habe irgentwie die Zeile "Res := bind( SSock, ARes.ai_addr^, ARes.ai_addrlen );" in verdacht.

Ich hoffe jemand hat einen Tipp.

Grüße von der sonnigen Nordsee

Peter