Datei im Netzwerk versenden auch ohne Thread möglich?



  • Hi zusammen,

    ich folgendens Problem:

    Ein Server wird über eine COM-Schnittstelle aufgerufen. Dieser erzeugt
    eine Datei und diese möchte ich an den aufrufenden Client zurückschicken.

    Jetzt hab ich folgenden Code gefunden:

    #define PORT 34000 /// Select any free port you wish
    
    	AfxSocketInit(NULL);
    	CSocket sockSrvr; 
    	sockSrvr.Create(PORT); // Creates our server socket
    	sockSrvr.Listen(); // Start listening for the client at PORT
    	CSocket sockRecv;
    	sockSrvr.Accept(sockRecv); // Use another CSocket to accept the connection
    
    	CFile myFile;
    	myFile.Open("C:\\testdatei.txt", CFile::modeRead | CFile::typeBinary); 
    
    	int myFileLength = myFile.GetLength(); // Going to send the correct File Size
    
    	sockRecv.Send(&myFileLength, 4); // 4 bytes long
    
    	byte* data = new byte[myFileLength]; 
    
    	myFile.Read(data, myFileLength);
    
    	sockRecv.Send(data, myFileLength); //Send the whole thing now
    
    	myFile.Close();
    	delete data;
    
    	sockRecv.Close();
    

    Ist es nicht so, dass sockSrvr.Listen(); auf eine Antwort vom Client wartet?

    Client ruft die Funktion pComObject->getData() auf, Server startet den Socket,
    aber da er wartet wird der Funktionsaufruf doch gar nicht beendet, oder? Somit
    ist der Client ja dann nicht in der Lage auf dieses Socket zuzugreifen, da er
    immer noch im Funktionsaufruf festhängt.

    Also muss ein Thread angelegt werden? 😕
    Muss das sein? Geht das nicht auch anders?

    Falls ich hier einen Denkfehler habe oder es eine elegantere bzw. schnellere
    Methode gibt, dann könnt ihr mich gerne berichtigen.

    Die Datei die erstellt wird, hat eine Größe von ca. 50KB - 2MB und somit ist
    Möglichkeit, diese über COM zurückzusenden, zu langsam (und ich weiß nicht
    wie das geht > 64KB).



  • mit standard c++ kann ich dir leider nicht helfen,
    und viele hier in dem forum, die sich damit besser auskennen werden im
    standard c++ forum einfach nicht nachsehen.
    darum, einmal bitte
    durchlesen, und
    dann denk noch mal drüber nach, in welches forum dein beitrag am besten passt.
    dahin wirst du dann verschoben werden 🙂 bis dahin: geduld



  • Ähh 🙄 ja danke...



  • listen() bedeutet nur, daß der Server auf weitere Connections wartet. Nur dann funktioniert der (hier wohl blockierende) Aufruf von accept(), der die Verbindung annimmt.
    (Blockierend) auf eine Anfrage des Clients würde der Server durch den Aufruf von recv() warten.

    Ich hab hier stellvertretend API-Funktionen genannt, da ich die MFC-Implementation für Sockets nicht kenne - allerdings ist das hier sowieso im falschen Forum. 😉



  • Hab jetzt ne gute Möglichkeit gefunden...

    ich verschick die Datei jetzt per FTP (InternetOpen).



  • Stichwort
    CAsyncSockets


Anmelden zum Antworten