Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Chat Server empfängt immer nur einmal

  Alt 19. Mär 2005, 00:15
Zitat von Basilikum:
vermutlich wirst du nicht um den Non-Blocking-Mode herumkommen....
Ich hatte gerade, als ich du das über blocking und non-blocking geschrieben hast, etwas im Internet gestöbert. da wurde allgemein gesagt, dass man non-blocking sockets nicht verwenden sollte.

Zitat:
und für die Kommunikation zwischen den Client-Threads wird irgend eine Art von Thread-Safen Queue benötigt...
Ich habe mir das so überlegt: Die Nachricht wird in einen gloablen String geschrieben. Jedesmal, wenn was ankommt, feuert der ClientThread einen Event und der ServerThread, der die ClientThreads erstellt, schickt die Nachricht dann Reih um an alle Clients. Das heißt, ich bräuchte zusätzlich noch ein Array mit den SocketASdressen der Clients. Oder könnte man auch auf dem Port einen Broadcast schicken? Wenn ja, wie geht das?
`
Zitat:
auf Dinge wie concurrent Socket-Operationen mehrere Threads auf dem selben Socket würde ich mich nicht einlassen... das kracht über kurz oder lang...
Kannst du das etwas näher ausführen? das sind so meine ersten Schritte in der Netzwerkprogrammierung.

Zitat:
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;
Ups. Danke.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat