TTcpServer (Verständins Problem mit TcpServer1Accept())
-
Die guten alten Sockets mal wieder...
Ich bin gerade dabei mein Tool ein wenig zu erweitern. Dabei findet eine Kommunikation mit Hilfe von Socktes statt. Dazu verwende ich im mom. die Komponenten TTcpServer und TTcpClient.
Dazu existiert eine Klasse die für mich im Stappel Kleinigkeiten abnimmt und z.B. das Formular anpasst. Zu dieser Klasse auch ein Thread der den ankommenden Puffer liest und anschließen interpretiert. Funktioniert soweit ganz gut... Allerdings nur mit der Komponente TTCpClient (Verbindung wird ausgehend aufgebaut via connect() ).
Wenn ich allerdings mit der TTcpServer Komponente eine Verbindung annehme habe ich ein kleines (verständis-)Problem.
Mit dem folgenden Code hätte ich keinerlei Probleme mit dem Empfangen.
void __fastcall TService2::TcpServer1Accept(TObject *Sender, TCustomIpClient *ClientSocket) { char puffer[10240]; int puffersize = 10240; int recivedBytes = -1; while (recivedBytes != 0) { recivedBytes = ClientSocket->ReceiveBuf( puffer, puffersize); parseCmd( AnsiString( puffer ) ); } // ... Verbindung getrennt }
Jedoch würde ich die eingehende Verbindung (TCustomIpClient *ClientSocket) gerne in einer Klassenvariabel behalten um dann wie auch bei dem TcpClient aus meiner Klasse heraus darauf zugreifen zu können.
void __fastcall TService2::TcpServer1Accept(TObject *Sender, TCustomIpClient *ClientSocket) { sock.acceptConnection(); sSocket = ClientSocket; }
So jedoch klappt es nicht. Greife ich nun aus meiner Klasse auf "sSocket" zu ist das Socket nicht mehr verbunden.
Kann mir jemand sagen woran es liegt?