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