IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Discussion :

[C++][SOCKET]Problème à l'envoi


Sujet :

Développement

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut [C++][SOCKET]Problème à l'envoi
    Salut à tous.

    Voila je suis en train de dev une petite dll en C++ utilisant des SOCKET. En réception, pas de problème, mais en envoi... Pas moyen.

    Lorsque je fais mon send, il ne se passe strictement rien. Par contre, lorsque je ferme mon socket, le server sur lequel je suis sensé envoyé recoit bien une partie des messages mélangés les uns aux autres.

    Voici ma classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    class COMSERVER_API CComServer {
    private :
    	WSADATA WSAData;
    	SOCKET sock;
    	SOCKADDR_IN sin;
    	char* buffer;
    	ETAT_CONNEXION m_Etat;
    	int m_nEssai;
    public:
    	CComServer(LPCSTR p_IP);
    	~CComServer();
    
    	void SetStream (LPCSTR p_string);
    	char* GetStream();
    
    	bool TryXConnection(int p_nEssai);
    	void Deconnection();
    
    	bool Attach();
    	void Detach();
    	
    };
    Ma connexion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    //___________________________________________________________________
    //Constructeur et connexion au server
    CComServer::CComServer(LPCSTR p_IP)
    { 
    	m_nEssai = 3;
    	//Je suis OFFLINE pour l'instant
    	m_Etat = OFFLINE;
    	buffer = new char[65525];
    	//Initialisation du buffer et du socket
    	WSAStartup(MAKEWORD(2,0), &WSAData);
    	sin.sin_addr.s_addr= inet_addr(p_IP);
    	sin.sin_family=AF_INET;
    	sin.sin_port=htons(13023);
    	sock = socket(AF_INET,SOCK_STREAM,0);
    	//Liaison du socket
    	m_Etat = CHARGE;
    	//Tentative de connexion
    	TryXConnection(m_nEssai);
    	
    	return; 
    }
    Je vois passe ma fonction TryXConnection qui me permet d'essayer de me connecter à plusieurs reprises puisque sur la connexion je n'ai aucun probleme. En résumé elle fait le bind et le connec.

    Viens ensuite ma fonction d'envoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void CComServer::SetStream(LPCSTR p_string)
    {
    	send(sock,p_string, strlen(p_string),0);
    	int ntmp = WSAGetLastError();
    }
    J'ai rajouté le WSAGetLastError pour vérifier et j'ai toujours 0.

    Dans mon code je fais un SetStream avec "PING" et ensuite je me déco. Sur le SetStream() mon serveur ne recoit rien mais lorsque je me deco (closesocket), alors il recoit un mélange de mon ping et de mon message de deco...

    Si quelqu'un a une idée... Je suis prenneur.

    Merci d'avance

    [edit] J'ai modifié un peu la fonction d'envoi et je recupère maintenant bien les bons messages. Mais ils ne sont toujours envoyé qu'a la fermeture du socket.

  2. #2
    Membre Expert
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Par défaut
    Bonjour,

    Je ne connais pas trop les sockets en C++, mais je pense qu'il faut vider le tampon d'envoi (buffer) après avoir fait un send afin de s'assurer que les données sont physiquement envoyées. Le nom de la méthode de vidage de tampon doit s'appeler flush() ou quelque chose dans le genre

    Bon courage

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Je pense aussi qu'il s'agit d'un problème dans ce genre.

    Mon serveur est en C# et je sais que la il faut modifier l'option AutoFlush pour que les messages soient envoyer automatiquement.

    Personne n'aurait une idée de comment faire avec des SOCKET plus classique ?

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Personne n'a eu d'idée révolutionnaire pendant le we ?

    La je suis en train d'essayer de regarder au niveau des options du socket mais pour l'instant ca ne donne rien. Je ne récupère toujours mes messages qu'a la fermeture du socket..

    Donc si quelqu'un a une idée je suis prenneur !

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Humpf... Bon ben j'ai trouvé. Je savais bien que ca devait être une connerie... Il manquait simplement un \r\n à la fin de ma chaine...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programmation Socket : problème lors de l'envoie du fichier.
    Par WhiteTigerZ dans le forum Entrée/Sortie
    Réponses: 17
    Dernier message: 14/05/2011, 10h37
  2. Réponses: 3
    Dernier message: 16/09/2010, 20h38
  3. problème d'envoie de fichier avec socket
    Par pipip dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 17/11/2009, 21h39
  4. windows socket, problème envoi de structure :s
    Par ramislebob dans le forum Réseau
    Réponses: 7
    Dernier message: 29/07/2006, 23h17
  5. Problème d'envoie de text avec les sockets
    Par Coussati dans le forum Web & réseau
    Réponses: 6
    Dernier message: 16/09/2005, 10h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo