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

MFC Discussion :

Pb avec CAsyncSocket (MFC)


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 56
    Par défaut Pb avec CAsyncSocket (MFC)
    Bonjour à tous.

    Voilà je suis en train de créer un serveur FTP et j'ai quelques soucis. Lorsque je dois envoyer des données (un fichier par exemple) sur le canal de données je fais :
    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
     
    /////////////////////////////////////////////////////////////////////////////
    BOOL CNEOFtpDataSocket::SendFile(CString p_strFilePathName)
    /////////////////////////////////////////////////////////////////////////////
    {
    	TRACE("CNEOFtpDataSocket::SendFile::BEGIN\n");
    	// open source file
    	if (!m_cFile.Open(p_strFilePathName, CFile::modeRead | CFile::shareDenyNone | CFile::typeBinary))
    	{
    		return FALSE;
    	}
     
    	m_nTotalBytesToSend = m_cFile.GetLength();
    	m_nTotalBytesTransfered = 0;
     
    	TRACE("CNEOFtpDataSocket::SendFile::before OnSend\n");
     
    	OnSend(0);
     
    	TRACE("CNEOFtpDataSocket::SendFile::END\n");
    	return TRUE;
    }
    et dans OnSend j'ai
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    		BYTE l_bData[NEO_PACKET_SIZE];
     
    		while (m_nTotalBytesTransfered < m_nTotalBytesToSend)
    		{			
    			m_cFile.Seek(m_nTotalBytesTransfered, CFile::begin);
     
    			l_nDataRead = m_cFile.Read(l_bData, NEO_PACKET_SIZE);
    			l_nDataSend = Send(l_bData, l_nDataRead);
    			if (l_nDataSend == SOCKET_ERROR)
    			{
    				// Transfer error
    				DWORD l_dwError;
    				l_dwError = GetLastError();
    				if (l_dwError == WSAEWOULDBLOCK)
    				{
    					Sleep(0);
    					break;
    				}
    				else
    				{
    					// Closing file
    					m_cFile.Close();
    					m_cFile.m_hFile = NULL;
     
    					// Closing socket
    					Close();
     
    					// Change status
    					m_pControlSocket->m_nStatus = NEO_STATUS_IDLE;
     
    					m_nTotalBytesToSend = 0;
    					m_nTotalBytesTransfered = 0;
     
    					// Send a response to client
    					l_strResponse = NEO_RESPONSE_TRANSFER_ABORTED;
    					m_pControlSocket->Send(l_strResponse , l_strResponse.GetLength());	
    					m_pControlSocket->DisplayMessage(l_strResponse);
    				}
    			}
    			else
    			{
    				m_nTotalBytesTransfered += l_nDataRead;
    			}
    		}
    Lors de l'execution, lorsque le socket se trouve bloqué (l_dwError == WSAEWOULDBLOCK) je sors de la boucle et de la fonction OnSend. La le systeme rappelle l'evenement OnSend et l'envoi continue.

    Par contre lors de certaines execution lorsque le Socket est occupé je sors de la boucle et la rien ne se passe plus la fonction OnSend n'est pas rappelée par le systeme. Je ne comprend pas. Si qq un pouvais m'eclairer.

    Encore merci d'avance.

  2. #2
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 56
    Par défaut
    J ai resolu ce probleme, en fait lorsque le client ne lit plus, le AsyncSocket ne peut plus envoyé de données car le buffer est encore plein. Cela vient du fait que le client ne lisait plus sur le socket car il n'attendais pas encore l'envoi du fichier mais un accusé d'envoi de fichier (code 150 en FTP).

    Maintenant tout marche OK.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/10/2005, 21h36
  2. Réponses: 4
    Dernier message: 02/06/2005, 13h08
  3. Origine de Visual C++ - lien avec les MFC
    Par drinkmilk dans le forum MFC
    Réponses: 5
    Dernier message: 18/04/2005, 10h47
  4. probleme de reaffichage avec openGL [MFC]
    Par ryu20 dans le forum MFC
    Réponses: 9
    Dernier message: 22/01/2005, 20h12
  5. Charger et afficher une image jpg avec les mfc
    Par glop - pas glop dans le forum MFC
    Réponses: 3
    Dernier message: 11/02/2004, 18h59

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