AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke TIdTCPServer (Indy) und TClientSocket

TIdTCPServer (Indy) und TClientSocket

Ein Thema von Schwedenbitter · begonnen am 15. Nov 2016 · letzter Beitrag vom 17. Nov 2016
Antwort Antwort
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

TIdTCPServer (Indy) und TClientSocket

  Alt 15. Nov 2016, 15:12
Hallo,

ich stehe vor folgendem Problem:
ich benötige einen TCP-Server, der auf einem Linux-System mit wine laufen kann. Das funktioniert offenbar mit den Indys. Ich habe breits diesen Code gefunden, der fast funktioniert. Ich kann eine Verbindung herstellen zwischen dem Server-Programm und dem TClientSocket herstellen. Und Daten, die ich mit AContext.Connection.IOHandler.WriteLn('Willkommen'); vom Server sende, kommen am Client auch an.

Ich habe aber das Problem, dass es umgekehrt nicht klappt. Wenn ich also mit TClientSocket.Socket.SendText('Hello World'); etwas vom Client sende, kommt nichts beim Server an. Es wird noch nicht einmal das Ereignis TIdTCPServer.OnExecute(AContext: TIdContext); ausgelöst.

Kann mir jemand erklären, woran das liegt?
Falls ja, gibt es Abhilfemöglichkeiten?

Den Quellcode habe ich angehängt. Es sind meine Anfänge mit den Indys und ich habe mitbekommen, dass es da diverse Unterschiede in den Versionen gibt, die zu Problemen führen. bei diesem Projekt benutze ich Delphi XE5.

Gruß, Alex
Angehängte Dateien
Dateityp: zip TCP-Mix_1.zip (3,1 KB, 12x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TIdTCPServer (Indy) und TClientSocket

  Alt 15. Nov 2016, 15:21
Hallo,

Firewall, seLinux.
Alternativ kannst Du auf dem Server mal nc -l <Dein Port> starten
und dann versuchen dich mit dem Client zu verbinden.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: TIdTCPServer (Indy) und TClientSocket

  Alt 15. Nov 2016, 15:56
Danke für die Antwort.
Firewall, seLinux.
Das ist immer das erste, was ich bei Tests mit dem Netzwerk deaktiviere, um "Irritationen" zu vermeiden
Aber daran liegt es nicht, weil dasselbe Problem auch auftritt, wenn ich das auf demselben oder anderen Windows-Rechnern mache. Es liegt also gar nicht an Linux...

Alternativ kannst Du auf dem Server mal nc -l <Dein Port> starten
und dann versuchen dich mit dem Client zu verbinden.
Siehe oben. Aber ich werde es mir merken, wenn es mal unter Windows läuft und es dann Probleme unter Linux geben sollte.

[EDIT]
Ich hatte schon verschiedene Strings (Ansi, Wide, Short) im Verdacht.
Aber das kann es nicht sein. Denn dann müsste zum einen ja das Ereignis zumindest ausgelöst werden und er müsste mir dann irgend welchen Datenmüll anzeigen. TClientSocket nutzt AnsiString und - wenn ich das richtig den Quellen entnommen habe - ist es bei den Indys auch AnsiString. Also theoretisch alles im grünen Bereich.
[/EDIT]

Gruß, Alex
Alex Winzer

Geändert von Schwedenbitter (15. Nov 2016 um 15:59 Uhr)
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: TIdTCPServer (Indy) und TClientSocket

  Alt 16. Nov 2016, 13:06
Offenbar hängt es schon an Delphi - oder meinen bescheidenen Programmierkünsten:

Ich habe mir zu Testzwecken die Mühe gemacht und auf einem Form "schnell" mal je Server und Client der Indys und einen TClientSocket platziert und mit Code unterlegt. Ich kann das auch anhängen, falls jemand Interesse hat.

Der Indy-Client kann etwas an den Indy-Server senden - hätte mich auch gewundert, wenn es nicht so gewesen wäre. Mit dem TClientSocket kann ich mich immerhin noch zum TIdTCPServer verbinden. Aber wenn ich mit ClientSocket.Socket.SendText('Hello World'); etwas absetze, kommt das aus mir unerfindlichen Gründen nicht an - genau wie bei den getrennten Programmen. Das Ereignis wird auch hier nicht ausgelöst

Jetzt wollte ich gern testen, ob es umgekehrt klappt, vom Server etwas an TClientSocket zu senden. Bedauerlicher Weise hängt sich folgender Code (den ich im www gefunden habe) ohne jedwede Fehlermeldung auf; selbst das Senden an den Indy-Client klappt somit nicht:
Delphi-Quellcode:
Procedure TForm1.BtnBrdcastClick(Sender: TObject);
Var
   CList            : TList;
   I               : Integer;
Begin
   CList:= IdTCPServer.Contexts.LockList;
   Try
      For I:= 0 To Pred(CList.Count) Do
      Try
         TIdContext(CList[I]).Connection.SendCmd(EDBrdCast.Text);
      Except End;
   Finally
      IdTCPServer.Contexts.UnlockList;
   End;
End;
Kann mit dazu jemand etwas sagen?

Ich würde wirkllich gern den Indy-Server und den Delphi-Client miteinander verbinden. So schnell will ich da nicht aufgeben. Aber ich finde schon jetzt, dass die Indys vergleichsweise unhandlich sind und merkwürdig reagieren...

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: TIdTCPServer (Indy) und TClientSocket

  Alt 16. Nov 2016, 15:22
Ich weiß nicht ob es richtig ist was ich jetzt sage, aber ich hatte so etwas auch mal testweise ausprobiert.

Beim Zugriff auf die LockList wird ein SperrFlag gesetzt welches mit UnlockList aufgehoben wird. Das Problem bei mir war allerdings, dann ich, egal ob ich mir die Instanz zwischengespeichert habe oder nicht, pro Zugriff auf die LockList ein UnlockList aufrufen musste.

Erst dann hat es funktioniert. Aber ich dachte mir damals schon, dass das nicht richtig sein kann. Eventuell findet sich ja jemand der das schon gemacht hat.

Stahli hat doch aktuell so ein Socket Framework gebaut wenn ich mich recht erinnere. Ob das allerdings etwas damit zu tun hat weiß ich nicht.
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#6

AW: TIdTCPServer (Indy) und TClientSocket

  Alt 16. Nov 2016, 15:45
http://stackoverflow.com/questions/3...texts-locklist
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:37 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