Bild senden über Socket
-
Hallo Leute,
ich möchte gerne ein Bild über eine Socket-Verbindung schicken.
Ich habe den Server schon getestet, er empfängt das Bild und zeigt es an
(mit einem anderen Programm).Jetzt möchte ich das gerne mit dem "Borland C++ Builder 5" an den Server Senden.
Folgendes habe ich gemacht:
void __fastcall TfrmMain::VerbindenButtonClick(TObject *Sender) { ClientSocket1->Host=ServerEditFeld->Text; ClientSocket1->Port=StrToIntDef(Trim(PortEditFeld->Text),8000); try { ClientSocket1->Open(); } catch(...) { ShowMessage("Fehler beim Connecten von " + ServerEditFeld->Text + " : " + IntToStr(ClientSocket1->Port)); } } //---------------------------------------------------------------------------...
void __fastcall TfrmMain::SendenButtonClick(TObject *Sender) { TJPEGImage *jpg = new TJPEGImage(); TMemoryStream *mem = new TMemoryStream(); jpg->Assign(Image1->Picture); mem->Clear(); jpg->SaveToStream(mem); //mem->SaveToFile("c:\\test.jpg"); ClientSocket1->Active = true; ClientSocket1->Socket->SendStream(mem); //ClientSocket1->Socket->SendBuf(mem,mem->Size); delete jpg; jpg=null; delete mem; mem=null; } //---------------------------------------------------------------------------Wie Ihr seht habe ich vorher auch schon geschaut ob in dem Stream was drinn ist ;-).
Der Connect funktioniert, der Server meldet ein Client Connectet.
Aber nach dem Senden des Streams (in beiden Beispielen oben)
passiert einfach nichts ;-(.Kann mir jemand helfen ?
Danke
-
Wird das Ereignis ClientRead des Servers wenigstens erreicht? Wenn ja, dann poste mal diesen Code.
Wenn nein, dann würde ich den Stream zwischenspeichern, um zu prüfen, ob er die gewünschten Daten enthält.
-
Habe leider vergesen, das das ganze als byte array übertragen werden muss ;-).
Byte *by[65000]; mem->Position=0; try { memcpy(by,mem->Memory,mem->Size); } catch(...) { ShowMessage("FEHLER beim memcopy"); } ClientSocket1->Socket->SendBuf(by,mem->Size);Jetzt muss ich nurnoch herausfinden, wie ich das Byte-array dynamisch an die tatsächliche Größe des Bildes anpasse ;-).
-
Byte* by = new Byte[mem.size];
-
Danke

Das hatte ich eigendlich ausprobiert, da hat er mir irgendwas von nicht statisches element erzählt

Aber jetzt geht's
Supiiiiii danke an alle beteiligten,
-
Der Fehler kommt nur wenn Du es ohne new versuchst... (Byte by[65000])
In meinem Beispiel muss es natürlich auch mem->Size heißen.
Vergiss nicht, das Byte-Array muss mit delete[] by; freigegeben werden.
-
OK danke Dir
