AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi WinSock: recv()-Puffer wird überschrieben
Thema durchsuchen
Ansicht
Themen-Optionen

WinSock: recv()-Puffer wird überschrieben

Ein Thema von Nogge · begonnen am 27. Aug 2006 · letzter Beitrag vom 1. Sep 2006
 
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#1

WinSock: recv()-Puffer wird überschrieben

  Alt 27. Aug 2006, 12:40
Hallo Community!
Ich habe einen Server mithilfe der WinSock programmiert, der Daten von einem Client zum anderen versendet. Jetzt kommt es allerdings oft vor, dass Client 1 10x in der sec. einen string an den server sendet, die recv()-func allerdings nicht sofort ausgeführt wird. Wenn die recv()-func ausgeführt wird, befinden sich ca. 6.3 (von 10) strings in dem Puffer, obwohl ich mithilfe von recv() jeden string einzeln erhalten möchte.
Hier mal der wichtigste Ausschnitt:
Delphi-Quellcode:
  FTimeVal.tv_sec := 0;
  FTimeVal.tv_usec := 1;

  ClientList := TIntegerList.Create;
  try
    while Server.FServerRunning do
    begin
      FD_ZERO(FDSet);
      FD_SET(Server.AccSock, FDSet);
      for i := 0 to ClientList.Count-1 do
        FD_SET(ClientList[i], FDSet);
      {
        If time-out is a null pointer, select will block indefinitely
        until at least one descriptor meets the specified criteria.
        -------------------------------------------------------------
        -1 = SOCKET_ERROR
        0 = keine Daten vorhanden
      }

      if (select(0, @FDSet, nil, nil, @FTimeVal) > 0) then
      begin
        if not FD_ISSET(Server.AccSock, FDSet) then
        begin
          w := 0;
          count := ClientList.Count;

          while (w < count) do
          begin
            if FD_ISSET(ClientList[w], FDSet) then
            begin
              SetLength(Buffer, MAXLEN);
              BytesRead := recv(ClientList[w], Buffer[1], MAXLEN, 0);
              [...]
Könnt ihr mir sagen, was ich ändern muss, damit ich den Thread jederzeit, wann ich will, mithilfe der Variablen Server.FServerRunning (einfach innerhalb einer Critical Section auf false setzen) beenden kann und doch auf JEDES Datenpaket des Clients reagieren kann?

mfg Nogge
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz