Einzelnen Beitrag anzeigen

Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#5

Re: Chat Server empfängt immer nur einmal

  Alt 19. Mär 2005, 00:01
vermutlich wirst du nicht um den Non-Blocking-Mode herumkommen.... und für die Kommunikation zwischen den Client-Threads wird irgend eine Art von Thread-Safen Queue benötigt...

pseudo-code:
Code:
while ClientConnected do begin

  if networkDataAvailable then pushQueueData

  if queueDataAvailable then sendNetworkData

end;
(wobei die *DataAvailable für beispielsweise 200ms blockieren, wenn keine Daten vorhanden sind, so dass nicht die gesamte CPU beübt wird.... die daraus resultierende Latenz ist bei einem Chat-System nicht störend...)

auf Dinge wie concurrent Socket-Operationen mehrere Threads auf dem selben Socket würde ich mich nicht einlassen... das kracht über kurz oder lang...

PS: hier spielst du mit dem Feuer (access violation / live lock):
Delphi-Quellcode:
while True do
  begin
    if recv(Sock, MsgBuffer, sizeof(MsgBuffer), 0) > 0 then
      AddLogText(hApp, IDC_LV, Format(rsMsg, [string(MsgBuffer)]), 2);
  end;
besser so:
Delphi-Quellcode:
while true do begin
  r:=recv(Sock, MsgBuffer, sizeof(MsgBuffer) - 1, 0); // #0 muss auch Platz haben
  if not (r > 0) then break; // recv gibt 0 zurück, wenn Connection geschlossen wurde

  MsgBuffer[r]:=#0;
  AddLogText(hApp, IDC_LV, Format(rsMsg, [string(MsgBuffer)]), 2);
end;
  Mit Zitat antworten Zitat