MFC client serveur CAsyncSocket

wildcat010 Messages postés 2 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 12 mars 2009 - 4 mars 2009 à 08:52
wildcat010 Messages postés 2 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 12 mars 2009 - 12 mars 2009 à 09:08
Bonjour à tous !
Voici mon problème, je développe un programme qui à pour but de gérer la communication entre un serveur est plusieurs clients, mais le problème est que mon serveur n'accepte pas plusieurs connexion de clients, je ne sais pas si le problème viens de mon serveur ou de mon client qui bloque le serveur.
Pour la connexion de mon serveur j'utilise la méthode OnAccept(), qui est dans la classe SocketService qui dérive de CAsyncSocket :

void CSocketServeur::OnAccept(int CodeErreur)
{
// le serveur accepte les connexions

CSocketService *m_SocService = new CSocketService;

if(Accept(*m_SocService))
{
AfxMessageBox("Client connecté ");
}
else
{
delete m_SocService;
}

CAsyncSocket::OnAccept(CodeErreur);
}
ensuite dans une autre classe qui dérive de CAsyncSocket : CSocketServeur, j'ai le OnReceive() suivant :
void CSocketService::OnReceive(int CodeErreur)
{
TCHAR buffer[50];
CString m_strReception;
int nbRead = Receive(buffer, 50);
buffer[nbRead] = 0;
CString taille(buffer);
m_strReception += taille; //additionne les 2 valeurs et la place dans la variable de gauche

if(m_strReception == "quit")
{
ShutDown();
AfxMessageBox("Client déconecté");
}
else
{
AfxMessageBox(m_strReception);
}
CAsyncSocket::OnReceive(CodeErreur);
}
Voila pour mon serveur.
Ensuite je voudrai avoir des informations si possible sur le clients car je n'utilise pas du tout les fonctions OnClose() et tout ... Je voudrai aussi savoir comment les implémenter si il y en a besoin.
Pour mon client j'utilise juste les fonctions suivante :
ipconfig est un objet de CSocketService qui dérive de CAsyncSocket et qui est utilisé dans Monprojet.Dlg .
Pour crée la connexion :
socket = ipconfig.Create(SOCK_STREAM) ;
socket = ipconfig.Connect(m_ip, m_port);
Pour l'envoie de donnée :
ipconfig.Send(m_texte,strlen(m_texte));
Pour la fermeture :
ipconfig.Close();

Aidez moi svp !!!!

2 réponses

nanonavich Messages postés 54 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 15 août 2015
5 mars 2009 à 20:44
il manque un bout code de connection?

 socket_result= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
     
        server_ip = new char [strlen(ip)+1];
        strcpy(server_ip, ip);
        server_port = port;
        address.sin_family = AF_INET;
        address.sin_addr.s_addr = htonl(INADDR_ANY);
      
  bind(socket_result, (LPSOCKADDR)&address, sizeof(address)))
        
   
       listen(socket_result, 10))  <- listen te permet ici 10 client?
       

 
0
wildcat010 Messages postés 2 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 12 mars 2009
12 mars 2009 à 09:08
En faite je fait juste un dans mon projetDlg.cpp :
BOOL Csocket_serveurv3Dlg::OnInitDialog()
{
.................
// Création et mise en écoute
m_Serveur.Create(5001);
m_Serveur.Listen();
}
Normalement le Listen() permet 5 clients par défaut enfin je pense, et là impossible d'avoir plus de 1 connexion.

Tu crois que le problème viens d'ici ?
0
Rejoignez-nous