ich habe TClientSocket und TServerSocket verwendet, da immer ein client zum anderen connectet und nicht umgekehrt (das reicht mir vorerst)
ich habe mehrere ansätze, aber alle gehen etwa so dass bei einem
Delphi-Quellcode:
procedure TFormConnecticut.ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
ein ReceiveText und ein SendText weiter geht.
Ich zeig mal eine solche funktion, die wirklich schon ein verzweiflugnsversuch ist, also nicht schimpfen =)
Delphi-Quellcode:
s:=Socket.ReceiveText;
// s=string
// das hier ist lösung nummer xy
SetLength(p, 0);
// p ist ein stringarray - ich habe am ende versucht in einer eigenen prozedur einer unit das protokoll aus dem string zu entschlüsseln
RestServer:=ProtocolResolve(s, RestServer, p);
// erklärung: RestServer behaltet sich den jeweiligen überrest, des protokolls
// ProtocolResolve empfängt den Buffer (s) den Rest vom letzten mal (RS) und p als Variable, in der er dann die einzelnen Strings abspeichern soll... (jeweils Protokollbefehle mit s[1] = kommando, s[2-3] = paketlänge etc.)
// x und o = integer
if Server.Socket.ActiveConnections>0
then
for o:=0
to Server.Socket.ActiveConnections-1
do
begin
For x:=0
to High(p)
do begin
s:=p[x];
Server.Socket.Connections[o].SendText(s);
b:=ORd(s[1]);
// kommandobyte
log.Lines.Add(ProtocolResolveStr(b))
// protocolresolvestr schreibt den index des kommandos in ein memo, debug
end;
end;
wie gesagt, womöglich denke ich etwas falsch denn es kann sein, dass der aufruf der prozedur alles durcheinander bringt.
allerdings habe ich die erfahrung gemacht, dass manchmal nicht der ganze befehl ankommt, deswegen der versuch mit RestServer. eigentlich sollte RestServer die meiste Zeit = '' sein.
Es kann sein, dass mein Lösungsansatz vollkommen daneben ist.