Condividi tramite


Windows Sockets: Utilizzo di classe CAsyncSocket

In questo articolo viene illustrato come utilizzare la classe CAsyncSocket.Tenere presente che questa classe incapsula Windows Sockets API su un livello basso.CAsyncSocket è ai programmatori che la funzione in dettaglio le comunicazioni di rete ma richiede la praticità dei callback per la notifica degli eventi della rete.In base a questa ipotesi, questo articolo solo l'istruzione fondamentale.È consigliabile considerare l'utilizzo di CAsyncSocket se si desidera che la semplicità di socket di windows della gestione dei protocolli di rete in un'applicazione MFC ma non si desidera venga compromessa la flessibilità.È inoltre possibile dare che sia possibile migliorare l'efficienza pianificando le comunicazioni in modo più diretto rispetto a quelli che è previsto tramite il modello alternativo più generale di classe CSocket.

CAsyncSocket è documentato in riferimenti alla libreria MFC.Visual C++ fornisce anche la specifica di Windows Sockets, disponibile in Windows SDK.I dettagli vengono posticipati è.Visual C++ non viene illustrata un'applicazione di esempio per CAsyncSocket.

Se non si è altamente informati le comunicazioni di rete e non si desidera una soluzione semplice, classe CSocket di utilizzo a un oggetto di CArchive .Vedere Windows Sockets: Utilizzo di socket con gli archivi per ulteriori informazioni.

In questo articolo riguarda:

  • Creazione e utilizzo di un oggetto di CAsyncSocket .

  • Le responsabilità con CAsyncSocket.

Creazione e utilizzo di un oggetto di CAsyncSocket

Per utilizzare CAsyncSocket

  1. Costruire un oggetto di CAsyncSocket e utilizzare l'oggetto per creare un handle sottostante di SOCKET .

    La creazione di un socket segue il modello di costruzione in due fasi.

    Di seguito è riportato un esempio:

    CAsyncSocket sock;
    sock.Create( );    // Use the default parameters                    
    

    In alternativa

    CAsyncSocket* pSocket = new CAsyncSocket;
    int nPort = 27;
    pSocket->Create( nPort, SOCK_DGRAM );                    
    

    Il primo sopra crea un oggetto di CAsyncSocket nello stack.Il secondo costruttore crea CAsyncSocket nell'heap.La prima chiamata di creare precedente utilizza i parametri predefiniti per creare un socket di flusso.La seconda chiamata di Create crea un socket di datagramma con una porta e un indirizzo specificato.(È possibile utilizzare qualsiasi versione di Create con qualsiasi metodo di costruzione.)

    i parametri a Create sono:

    • “Una porta„: un valore short Integer.

      Per un socket del server, è necessario specificare una porta.Per un socket client, in genere accettare il valore predefinito per questo parametro, che consente a Windows Sockets selezionare una porta.

    • Un tipo di socket: SOCK_STREAM (impostazione predefinita) o SOCK_DGRAM.

    • Un socket “address,„ as “ftp.microsoft.com„ o “128.56.22.8„.

      Si tratta dell'indirizzo (IP) del protocollo internet in rete.Basare tale definizione è sempre sul valore predefinito per questo parametro.

    I termini “porta„ e “indirizzo di socket„ sono illustrati in Windows Sockets: Porte e indirizzi di socket.

  2. Se il socket è un client, connettere l'oggetto socket a un socket del server, utilizzando CAsyncSocket::Connect.

    In alternativa

    Se il socket è un server, impostare il socket per avviare attendendo (con CAsyncSocket::Listen) per connettono i tentativi da un client.Quando riceve una richiesta di connessione, accettarla con CAsyncSocket::Accept.

    Dopo avere accettato la connessione, è possibile eseguire tali attività come convalidare le password.

    [!NOTA]

    La funzione membro di Accetta accetta un riferimento a un nuovo, oggetto vuoto di CSocket come parametro.È necessario costruire questo oggetto prima di chiamare Accetta.Se questo oggetto socket esce dall'ambito, la connessione verrà chiusa.Non chiamare Create per questo nuovo oggetto socket.Per un esempio, vedere l'articolo Windows Sockets: sequenza di operazioni.

  3. Eseguire le comunicazioni con altri socket chiamando le funzioni membro dell'oggetto di CAsyncSocket che incapsulano le funzioni API Windows Sockets.

    Vedere la specifica di Windows Sockets e la classe CAsyncSocketin riferimenti alla libreria MFC.

  4. Eliminare l'oggetto di CAsyncSocket .

    Se è stato creato l'oggetto socket nello stack, viene chiamato il distruttore quando la funzione contenitore esce dall'ambito.Se è stato creato l'oggetto socket nell'heap, utilizzando l'operatore di new , è necessario utilizzando l'operatore delete per eliminare l'oggetto.

    Il distruttore chiama la funzione membro di Chiudere dell'oggetto prima di eliminare l'oggetto.

Per un esempio di questa sequenza nel codice (in realtà per un oggetto di CSocket ), vedere Windows Sockets: sequenza di operazioni.

Le responsabilità con CAsyncSocket

Quando si crea un oggetto di classe CAsyncSocket, l'oggetto include l'handle di SOCKET di windows e fornisce operazioni su tale handle.Quando si utilizza CAsyncSocket, è necessario gestire di tutti i problemi che è possibile risolvere se tramite l'API direttamente.Di seguito è riportato un esempio:

  • “Blocco„ scenari.

  • Differenze di ordine dei byte tra i computer di inviare e di ricezioni.

  • Conversione tra Unicode e stringhe con i set di caratteri multibyte (MBCS).

Per le definizioni di questi termini e informazioni aggiuntive, vedere Windows Sockets: blocco, Windows Sockets: ordinamento di byte, Windows Sockets: Conversione delle stringhe.

Nonostante questi problemi, la classe CAsycnSocket può essere la scelta giusta automaticamente se l'applicazione richiede una flessibilità e si controlla possibile ottenere.In caso contrario, è necessario utilizzare la classe CSocket anziché.CSocket nasconde molto dettaglio necessario: pompa i messaggi di windows durante le chiamate di blocco e fornisce l'accesso a CArchive, che gestisce le differenze e la conversione delle stringhe dell'ordine dei byte automaticamente.

Per ulteriori informazioni, vedere:

Vedere anche

Concetti

In Windows Sockets MFC