Question sur la façon d'envoyer des images dans la programmation de socket?
-
05-07-2019 - |
Question
J'ai quelques questions à propos de l'envoi d'images.
Comment gérer différents types de fichiers, jpeg, png, etc.
Si le fichier est volumineux, j’utilise des numéros de séquence ... mais je ne sais pas comment arrêter de lire si je ne connais pas le nombre de numéros de séquence.
Mes connaissances en matière de transfert d'images / fichiers sont pratiquement nulles. Je n'ai jamais rien programmé de la sorte auparavant. J'espérais obtenir des conseils et astuces =)
Merci beaucoup.
J'utilise aussi QT, si cela peut améliorer ma situation.
La solution
Si vous utilisez un socket TCP, vous n'avez pas besoin de numéros de séquence, car TCP garantit déjà que les données arrivent dans le même ordre que lors de leur envoi. Envoyez simplement les données, puis fermez la connexion. Vous pouvez éventuellement utiliser un type d'en-tête de paquet auto-défini qui fournit des informations supplémentaires (par exemple, si vous souhaitez transmettre plusieurs fichiers via une seule connexion).
Autres conseils
Pour les images au moins, en supposant que vous utilisiez QImage, vous pouvez utiliser un QDataStream pour convertir votre QImage en un QByteArray, qui peut ensuite être écrit sur l'objet QTcpSocket à l'aide de write (). Il est possible de sérialiser à peu près n'importe quel type de données de Qt dans un QByteArray en utilisant cette méthode.
Pour les fichiers généraux, QIODevice (base pour QFile, entre autres) fournit des fonctions de lecture telles que readAll (), qui lira l’ensemble du fichier dans un QByteArray prêt à être envoyé.
Vous trouverez un certain nombre d’exemples de réseau inclus dans la distribution Qt. Voir Assistant Qt - > Contenu - > Tutoriels et exemples - > Réseau pour plus d'informations.
Transférez-les comme toute autre donnée binaire. send ()
, recv ()
. Ou quelle que soit l'abstraction fournie par Qt.