Guten Tag,
der TServerSocket kann ja "mehrere" Streams gleichzeitig empfangen. Wenn er sendet, hängt er sich aber auf oder?
So dasselbe beim Client: Ich habe einen Thread in dem ich empfangen möchte, hier habe ich bereits das Problem, dass ich ohne die entsprechenden "On-Read" .. proceduren klar kommen muss, wie kann ich das selber schreiben? (muss ich da ne dauerschleife machen?)
Wenn ich jetzt senden würde, könnte ich auf ctblocking und ctnonblocking stellen.. ich habe 2 queques (ToSend und Rev) sollte ich 2 Threads machen um diese zufüllen/abzuarbeiten? oder reicht 1er?
ich möchte eigentlich nur ein/zwei thread haben, in dem alles von der ToSendQueue alles gesendet wird und alles "empfangene" auf den Rev stapel abgelegt wird. Das natürlich möglichst ohne Verzögerung!
Reicht es so?
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:
| Client := TClientSocket.create( Nil ); Client.ClientType := ctNonBlocking; while not Terminated do begin zS := ToSend.Gib; if (zS<>Nil) then Client.SendStream( zS ); iLen := Socket.ReceiveLength; if iLen>0 then begin GetMem(Bfr, iLen); try Client.Socket.ReceiveBuf(Bfr^, iLen); zS := TMemoryStream.create; zS.Write(Bfr^, iLen); RevQueue.Drauf( zS ); finally FreeMem(Bfr); end; end; end; Client.Free; |
oder wäre das in 2 Threads besser aufgehoben?
Was passiert wenn man es in 2 Threads macht und beide gleichzeitig auf den Client zugreifen? (Thread 1: Client.Socket.ReceiveBuf.. Thread 2: Client.SendStream)
könnte das fehler erzeugen oder kann der TClientSocket das?