[C++][SOCKET]Probleme envoi

cs_raton Messages postés 39 Date d'inscription lundi 7 avril 2003 Statut Membre Dernière intervention 7 juillet 2006 - 7 juil. 2006 à 10:47
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 7 juil. 2006 à 17:07
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 :

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 :

//___________________________________________________________________
//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 :

void CComServer::SetStream(LPCSTR p_string)
{
send(sock,p_string, sizeof (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

<center>Mess with the best
Die Like the rest</center>

1 réponse

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
7 juil. 2006 à 17:07
Salut,

sizeof(p_string) ne renvoies pas la taille de la chaine, mais la taille de la variable p_string, qui est un pointeur.

Remplace sizeof(p_string) par strlen(p_string) dans ton send.
0
Rejoignez-nous