Winsock (serverseitig)

thooomy

Erfahrenes Mitglied
Hallo Freunde,

ich bin schon seit ner Weile auf der Suche nach eine Lösung für mein "kleines" Problem:
Ich programmiere an einem webserver. Nur klemmts an folgender Stelle: krieg ich einen Request vom Client in dem dieser ein Bild anfordert (z.B: jpeg) dann schickt mein Server zwar eine antwort - diese enthält wohl aber nicht das bild, da es vom browser nicht angezeigt wird.

ja klar - also mein Server öffnet Dateien aus dem Request, schreibt einen ordentlichen HTTP-Header (inkl. MIME-Typ) und schickt die Daten (ASCII) nach draussen. Das Funktioniert wunderbar bei txt oder stylesheets oder ähnlichem, aber bei Bildern nicht. Ich dachte schon das ich die Daten binär senden müsste, aber dies ist nicht der Fall, denn der winsock-Befehl send() erwartet als Parameter einen char-pointer und somit keine binären Daten.
Kann mir jemand helfen bzw. hat jemand ne Ahnug was ich meine ? ;) ?

thx, thomy
 
Ich dachte schon das ich die Daten binär senden müsste, aber dies ist nicht der Fall, denn der winsock-Befehl send() erwartet als Parameter einen char-pointer und somit keine binären Daten.

Ein char-Pointer kann doch trotzdem auf den Anfang eines Speicherbereichs zeigen, in dem Binärdaten liegen?! Oder irre ich da ?

Mfg
 
mmh nagut. also ich hab folgendes probiert bzw. ich zeig euch mal ein Stück Quelltext:
Code:
nFileDesc = open( sFullPath, O_RDONLY | O_BINARY );
if (nFileDesc > 0) {                                
    do {                                            
      nCount = read( nFileDesc, pBuffer, sizeof(pBuffer));
        
      if ( bIsFirstRun ) {      
        /* hier wird der Header erstellt und gesendet - 
        das interresiert nicht für das aktuelle Problem */         
      }

      nSendCheck = SureSend( nOutSocketA, pBuffer, nCount, 0);
      if ( nSendCheck < 0 ) {
          rLog << WSAGetLastErrorMessage( "send() failed" ) << tolog; 
          // das ist nur meine fehlerausgabe
          return (0);
      }
} while (nCount > 0);
close(nFileDesc);

so also pBuffer ist der besagte char-pointer. Müsste das jetzt nicht bereits binär ablaufen ?

SureSend() funktioniert genau wie das normale send() - es is nur ein wrapper den ich drum-
gebastelt hab um zu verindern das es blockiert...
Die Frage ist ja auch ob ich es überhaupt binär senden muss ;) - Ich steh eben nur vor dem
grundsätzlichen Problem, das er textbasierte Dateitypen vernünftig ausliefert, andere aber offenbar nicht.

EDIT:
hab mal ein bissl gesnifft usw.:
also offenbar werden die Daten gesendet, allerdings wohl nicht brauchbar - sodass der Browser sie nicht korrket auswertet - dieser fehler kann allerdings irgendwo in den socketfunktionen oder im http-standard vergraben sein - allerdings bin ich immernoch für vorschläge dankbar von leuten die sowas schonmal gemacht haben....
 
Zuletzt bearbeitet:
Zurück