Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - james08m

Pages: [1]
1
Réseau / Problème à recevoir un pointeur de uchar par TCP
« le: Février 11, 2015, 09:12:35 pm »
Bonjour, je travail sur un petit programme en C++ avec opencv et SFML 2.2 pour envoyer une image dans un  *uchar (cv::Mat::data dans opencv) vers un autre ordinateur, mais j'ai quelque problème. En premier lieu, le programme client prend un photo et puis l'envoi par tcp vers un programme serveur, mais le problème est que le serveur ne reçoit pas toutes les données envoyés et je récupère donc qu'une petite partit de l'image (le haut de l'image).

J'ai aussi essayer de changer les socket pour non bloquant, mais sans succès et je suis déjà certain que le frame envoyé est complet. Je crois bien avoir passé le bon size en paramètre quand je reçoit côté serveur, donc je ne sais pas pourquoi je ne reçoit pas tout l'image.

Hypothèse de ma part : Je crois peut être qu'envoyer mon *uchar par paquet serait la solution, mais je ne sais pas comment bien surcharger les opérateurs >> et <<. Surtout que je suis un peux mélangeur la dans la structure du *uchar...

Voici le code :

Client :
        Mat frame = Camera.getVectFrame(9); // Get a frame
        int imgSize = frame.total()*frame.elemSize();

        sf::TcpSocket socket;
        sf::Socket::Status status = socket.connect("127.0.0.1", 69000);
        if (status != sf::Socket::Done)
        {
                cout << "ERROR : Not connected" << endl;
        }
        else
        {
                cout << "Connected" << endl;

                // Send data
                if (socket.send(frame.data,imgSize) != sf::Socket::Done)
                {
                        cout << "ERROR : Fail to send" << endl;
                }
                else
                {
                        cout << "Sended : " << imgSize << endl;
                }

        }
 

Serveur :
        sf::TcpListener listener;

        // Listen to port 69000
        if (listener.listen(69000) != sf::Socket::Done)
        {
                cout << "ERROR : Can't listen to port" << endl;
        }
        else
        {
                // Wait for client
                sf::TcpSocket client;
                if (listener.accept(client) != sf::Socket::Done)
                {
                        cout << "ERROR : Client can't connect" << endl;
                }
                else
                {
                        cout << "Client connected" << endl;

                        // Receive data from socket
                        Mat  img = Mat::zeros(480, 640, CV_8UC3);
                        const int size = 921600;
                        size_t received;


                        if (client.receive(img.data, size, received) != sf::Socket::Done)
                        {
                                cout << "ERROR : Can't receive data" << endl;
                        }
                        else
                        {
                                cout << "Received : " << received << endl;

                                imwrite("received.jpg", img); // Save as jpg file
                        }
                }
 

2
Réseau / Envoyer une image par HTTP
« le: Juillet 23, 2014, 02:25:18 am »
Bonjour je suis sur un petit projet c'est temps-ci et je suis bloqué sur un point. Je suis capable d'envoyer par http du texte en POST, mais j'aimerais bien savoir désormais comment envoyer une image par HTTP. Je ne sais pas si je suis le seul qui ni arrive pas, mais c'est assez frustrant, car je ne trouve aucune documentation à ce sujet. Peut être je n'es juste pas été chanceux dans mes recherches, mais je m'en remet désormais à vous.

Pages: [1]