ASIO: What is the proper way to upload a LARGE file?

I have successfully been using this code to upload small stuff: try { // open tcp connection tcp::iostream net_stream(strSubmitServer, "12345"); // send file name net_stream << strFile << endl; // copy file char ch; while ((ch = fgetc(f)) != EOF) net_stream << ch; } catch (std::exception& e) { std::cout << "Exception: " << e.what() << std::endl; } Needless to say, the code above is extremely slow/inefficient for bulky transfers. Now I need to upload some large fails, and tried this: tcp::iostream net_stream(SERVER_ADDR, "12345"); // send file name net_stream << IN_FILE << "\n"; // send tags data size net_stream << count << "\n"; // copy tags data net_stream.write((char *)data, count); <<== app crashes here I figured that TCP would break the delivery into packets... TIA, -Ramon

Now I need to upload some large fails, and tried this:
tcp::iostream net_stream(SERVER_ADDR, "12345"); // send file name net_stream << IN_FILE << "\n"; // send tags data size net_stream << count << "\n"; // copy tags data net_stream.write((char *)data, count); <<== app crashes here
If it crashes, then most likely the "data" buffer is smaller than count. What is "data", how do you allocate it?

Hi, why don't you just do something like this? tcp::iostream net_stream(SERVER_ADDR, "12345"); std::ifstream fstream("file"); net_stream << fstream.rdbuf(); It's up to the stream-implementations to buffer the data appropriately then. Regards, michi7x7
participants (3)
-
Igor R
-
michi7x7
-
Ramon F Herrera