TServerSocket, Streams und nette Errors
-
Ich übertrage einen Stream von einer TClientSocket mit diesem Code;
TFileStream *ms = new TFileStream(dateiname, fmOpenRead); StatusBar->Panels->Items[0]->Text=("Loading DataStream"); ClientSocket2->Socket->SendStream(ms); delete ms; dateiname="";
Hiermit empfange ich;
TFileStream *stream = new TFileStream(dateiname, fmCreate); int CharsToReceive_int = ServerSocket2->Socket->ReceiveLength(); BYTE *Buffer_BYTEp = new BYTE[CharsToReceive_int]; ServerSocket2->Socket->ReceiveBuf(Buffer_BYTEp, CharsToReceive_int); stream->Position = 0; stream->Write(Buffer_BYTEp, CharsToReceive_int);
So jetzt kommts;
Das Laden und Versenden funktioniert ohne Bug beim Sender.
Dann steht aber beim Empfänger Windows socket error (10057) on api recv.
Zur selben Zeit hab ich einen Access Violation und dann jede Menge Speicherzugriffsprobs beim Sender.
Beende ich denn Sender normal kommen auch noch ein paar Speicherfehler, der Stream-Empfänger kann jedoch ohne weitere Fehler beendet werden.
Empfangen wurde natürlich nichts.Ich bin den Code von beiden Seiten mit dem Debugger schrittweise durchgegangen der Fehler ist aber immer erst nach dem Versenden bzw. Empfangen Code passiert.
Jetzt sitze ich ratlos vor meinem Rechner und weis nicht was ich tun soll.
Bitte dringend um Hilfe!!
-
hat keiner eine ahnung oder hab ich einfach mein problem zu ungenau geschildert. Obwohl ich zugeben muss das ich nicht weis wie ich mein Problem besser schildern könnte.
-
Definiere "nach dem Versenden". Wo tritt die AccessVoilation auf? Welche Funktionen im Calling Stack über der AccessViolation sind von dir? Kann da ein Fehler aufgetreten sein? Löschst du ein Objekt zu früh?
-junix
-
Schau dir mal wie groß die Datei ist und was raus kommt wenn du RecieveLength() aufrufst!
Dann solltest du selber merken was los ist!
-
Ich habe den Stream zu früh gelöscht.
Nachdem ich das delete beseitigt hab läuft wieder alles!