Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#1

System.Net.Socket.TSocket - Wer kennt sich aus?

  Alt 1. Dez 2015, 17:13
Hallo zusammen,

ich bin neulich irgendwo hier in der DP über ein sehr einfaches Beispiel für TCP-Verbindungen mit den Indy-Komponenten gestolpert.
Dieses Beispiel habe ich ausprobiert und ein bisschen erweitert und aufgebohrt, weil ich neben Indy noch andere Clienttypen testen wollte.

Programmbeschreibung:
Durch einen abgeleiteten TIdCustomTCPServer wird eine kurze String-Nachricht in zufälligen Zeitabständen gesendet.
Ich habe drei Clients (Indy, alte TClientSocket-Komponente und TSocket aus System.Net.Socket).
Die Clients laufen in einen eigenen Threadkontext und geben auf einen Memo ihre empfangenden Daten aus
Der Client mit Indy-Komponente TIdTCPClient läuft problemlos, ebenso der mit TClientSocket.

Nur die Umsetzung mit der neuen Socketklasse aus System.Net.Socket kriege ich nicht hin.
Nach kurzer Zeit erscheint eine Exception:

Code:
Project TCPClientServer.exe raised exception class ESocketError with message 'Network socket error: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat (10060), on API 'connect''.

System.Net.Socket.CheckSocketResult(???,'connect')
System.Net.Socket.TSocket.DoConnect
System.Net.Socket.TSocket.Connect(((-520, 1133, ((166, 47, 97, 0), ('¦', '/', 'a', #0), (12198, 97), 6369190), (#12, 'þ', 'm', #4, 'ü', '/', 'a', #0))))
System.Net.Socket.TSocket.BeginConnect$73$ActRec.$0$Body
System.Net.Socket.TSocket.TSocketConnectResult.AsyncDispatch
System.Classes.TBaseAsyncResult.DoAsyncDispatch
System.Net.Socket.TSocket.TSocketAsyncResult.Schedule$220$ActRec.$0$Body
System.Threading.TTask.Execute
System.Threading.TTask.InternalExecute($2AF1C80)
System.Threading.TTask.InternalWork(???)
System.Threading.TTask.ExecuteWork
System.Threading.TThreadPool.TQueueWorkerThread.ExecuteWorkItem(TTask($2AF1CC4) as TThreadPool.IThreadPoolWorkItem)
System.Threading.TThreadPool.TQueueWorkerThread.Execute
System.Classes.ThreadProc($2ACDCC0)
System.ThreadWrapper($2AB1130)
:7576337a kernel32.BaseThreadInitThunk + 0x12
:777e9882 ntdll.RtlInitializeExceptionChain + 0x63
:777e9855 ntdll.RtlInitializeExceptionChain + 0x36
Geht das überhaupt damit? Wenn ja, wo ist mein (Denk-)Fehler?
Bin mit so Netzwerkprogrammierung nicht wirklich vertraut.
Im Anhang zu finden in der Unit TCPClientServerExample.Client.NetSocket;
Angehängte Dateien
Dateityp: zip TCPClientServer_2015-12-01_17-12-25.zip (10,6 KB, 14x aufgerufen)

Geändert von TiGü ( 2. Dez 2015 um 11:06 Uhr)
  Mit Zitat antworten Zitat