How do you know how Big the file is? You assume to get it all in a single 
operation. You should use qdatastream which will properly serialize the byte 
array including a length. I've recently taken to using the experimental q HTTP 
server to provide a web interface, or more recently using qwebsocket to send a 
file over a websocket.

the only reason why your codeworks right now is because you're a text file is 
small and it can all be done in one write call. You're going to get many 
readyReads. The network can break your packets apart so you cannot rely on 
everything coming on one read.


> Sent: Saturday, May 30, 2020 at 1:29 AM
> From: "Ghobad Zarrinchian" <gzarrin....@gmail.com>
> To: interest@qt-project.org
> Subject: [Interest] How to send an arbitrary file over sockets
>
> Dear all,
> I'm writing a client/server application in which the client can send a file
> to the server. At the client side, my code is something like below:
>
> QFile fl(file_name);
>
> fl.open(QIODevice::ReadOnly);
>
> QByteArray fileBytes = fl.readAll();
>
> socket->write(fileBytes);
>
> fl.close();
>
> And at the server side, the code that receives the file is something like 
> this:
>
> QByteArray data = client_socket->readAll();
> QFile fl(file_name);fl.open(QIODevice::WriteOnly);fl.write(data);fl.close();
>
> While the code above works well with text files, it does not work for
> other file types (like JPG and PDF files). What is the problem? How
> should i modify the code so that it works for all kinds of files?
>
> Thanks.
> _______________________________________________
> Interest mailing list
> Interest@qt-project.org
> https://lists.qt-project.org/listinfo/interest
>
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to