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 :
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
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(); };
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.
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; }
Viens ensuite ma fonction d'envoi
J'ai rajouté le WSAGetLastError pour vérifier et j'ai toujours 0.
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(); }
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.
Partager