Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Dateien Kopieren über Csocket

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.12.2002, 19:23 Uhr
~Alf
Gast


Hy!!

Ich lese mit


C++:
char chptr;

             int iZ = 0;
             bool bEnde = 0;
    while(iZ < 1000)
    {
        CString sTmp2;
        if(fread(&chptr, 1, 1, Stream) == 0)
        {
            bEnde = 1;
            break;
        }
        sTmp2 = chptr;
        sTmp.Format("%s%s", SE_Text, sTmp2);
        SE_Text = sTmp;
        ++iZ;
    }

An SE_Text kommt noch ein info Byte drann und wird dann über CSocket gesendet.


C++:
iZ = 0;
             while(iZ < 1000)
    {
        fwrite(Nachricht.Mid(iZ, 1), 1, 1, Stream);
        ++iZ;
    }

("Bei bEnde while(iZ < Nachricht.GetLength() - 1)")

Schreibt das ganze wieder!

Das geht auch mit .txt Dateien! Aber bei .exe halt nicht!
Die Byte anzahl ist identisch nur die .exe Startet nicht wenn ich sie Öffne!
Kann das sein das CString manche Byte`s verändert?
Und was tuuu ich jetzt?

Danke!!!

Mfg

Andy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.12.2002, 20:48 Uhr
~Alf
Gast


Hy!

Habe mal die .exe im Text editor angezeigt.
Die Start Datei fängt so an

MZ   ÿÿ ¸ @ € º ´ Í!¸LÍ!This program cannot be run in DOS mode.

Die Kopierte so:

MZÿÿ¸@€º´ Í!¸LÍ!This program cannot be run in DOS mode.

Die leerzeichen zwischen den Zeichen werden weg gelassen was sich auf die Dateigrösse nicht aus wirkt!
Die leerzeichen zwischen "This program cannot be run in DOS mode."
werden hingegen übertragen! Was kann das z.B. zwischen MZ und  sein?
Wird übrigens bei "sTmp2 = chptr;" (CString = char) weggelassen!

Kann mir da jemand helfen?

Danke!!!

Mfg

Andy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.12.2002, 22:18 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Andy,
Du solltest binär übertragen, etwa so:


C++:
             // Sending Files
    AfxSocketInit(NULL);
    CSocket sockSrvr;
    sockSrvr.Create(PORT);
    sockSrvr.Listen();
    CSocket sockRecv;
    sockSrvr.Accept(sockRecv);
    CFile myFile;
    myFile.Open("C:\\My.exe", CFile::modeRead | CFile::typeBinary);

    int myFileLength = myFile.GetLength();
    sockRecv.Send(&myFileLength, 4);
    byte* data = new byte[myFileLength];
    myFile.Read(data, myFileLength);
    sockRecv.Send(data, myFileLength);
    myFile.Close();
    delete data;
    sockRecv.Close();


--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 03.12.2002 um 22:19 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.12.2002, 21:51 Uhr
~Alf
Gast


Danke Uwe!

Aber mein Empfänger empfängt nur 4380 Byte!
Ich mache

C++:
m_ConnectSocket.Receive(&iDateiLength, 4);
BYTE* data = new BYTE[iDateiLength];
m_ConnectSocket.Receive(data, iDateiLength);

habe mal zum Spaß

C++:
int i;
data[i];

im Debug angesehen ab i = 4380 kommen nur noch data[i] = 205 'Í' raus
Die kopierte Datei ist wieder gleich groß und gleich bis Zeichen 4380 (Stichproben )dann nur noch ÍÍÍÍÍÍ....

p.s:
Habe gerade Ideen & Projekte gesehen. Finde ich gut das du das rein genommen hast hoffentlich wird es ein Erfolg!!!

Mfg
Andy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.12.2002, 21:53 Uhr
~Alf
Gast


Hoppla

Habe natürlich

C++:
int i;
data[i];

im Debug angesehen!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.12.2002, 21:55 Uhr
~Alf
Gast


Nanu!

Wieso macht der aus

data[i];
Nur data;?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.12.2002, 21:58 Uhr
~alf
Gast


Ach Eckige ()
data i; // i in eckigen ()
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.12.2002, 23:15 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Andy,

Zitat:
Nanu!
Wieso macht der aus
data[z];
Nur data;?


Weil da das Script etwas dagegen hat :)

Irgendwo mal gefunden..., verändert..., ging schon damals nicht..., verkramst in einem Ordner..., gestern nicht gefunden..., etwas Quellcode ohne Test gepostet..., vermurkst. Mal im Ernst. Hatte ja geschrieben "etwas so". Jetzt müsste es aber funktionieren:

C++:
/* Client */
    #define PORT 3400

    AfxSocketInit(NULL);
    CSocket sockSrvr;
    sockSrvr.Create(PORT);
    sockSrvr.Listen();
    CSocket sockRecv;
    sockSrvr.Accept(sockRecv);
    CFile myFile;
    myFile.Open("C:\\My.exe", CFile::modeRead | CFile::typeBinary);

    int myFileLength = myFile.GetLength();
    sockRecv.Send(&myFileLength, 4);


    byte* data = new byte[4096];
    DWORD dwRead;
    do{
        dwRead = myFile.Read(data, 4096);
        sockRecv.Send(data, dwRead);
    }    
    while (dwRead > 0);



    myFile.Close();
    delete data;
    sockRecv.Close();

  
    /* Server */
    CFile destFile("C:\\My.exe", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
    AfxSocketInit(NULL);
    CSocket sockClient;
    sockClient.Create();

    sockClient.Connect("127.0.0.1", PORT);

    int dataLength;
    sockClient.Receive(&dataLength, 4);
        
    DWORD dwRead;
    byte* data = new byte[4096];
    do{
        dwRead = sockClient.Receive(data, 4096);
        destFile.Write(data, dwRead);
    }
    while (dwRead > 0);


    destFile.Close();

    delete data;
    sockClient.Close();


--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 04.12.2002 um 23:20 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.12.2002, 21:35 Uhr
~Alf
Gast


JA!!!!!!!!

Die Kopierte .exe läuft!!!!

Ich will nur hoffen das ich nicht schon wieder Zeiger sende da ich Server und Client auf einem Rechner Laufen lasse. Ist mir schon mal passiert!

Aber müsste jetzt stimmen!

Ich Danke dir Uwe!

Mfg Andy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: