Condividi tramite


Windows Sockets: Utilizzo di socket con gli archivi

In questo articolo viene descritto modello di programmazione di CSocket.La classe CSocket fornisce il supporto di socket a un livello di astrazione più elevato che definisce le CAsyncSocket.CSocket utilizza una versione del protocollo di serializzazione MFC per passare i dati a un oggetto socket tramite un oggetto MFC CArchive .CSocket fornisce il blocco (durante la gestione di elaborazione in background dei messaggi di windows) e viene consentito l'accesso a CArchive, che consente di gestire molti aspetti di comunicazione che è necessario farti utilizzando l'api non elaborato o una classe CAsyncSocket.

SuggerimentoSuggerimento

È possibile utilizzare la classe CSocket da sola, ad esempio versione più semplice di CAsyncSocket, ma il modello di programmazione più semplice consiste nell'utilizzo di CSocket con un oggetto di CArchive .

Per ulteriori informazioni sull'implementazione di socket con gli archivi viene eseguita, vedere Windows Sockets: Come socket con il lavoro degli archivi.Per il codice di esempio, vedere Windows Sockets: sequenza di operazioni e Windows Sockets: Esempio di socket utilizzando gli archivi.Per informazioni su alcune funzionalità che è possibile ottenere derivando le classi dalle classi di socket, vedere Windows Sockets: Deriva da classi di socket.

[!NOTA]

Se si scrive un MFC il programma client per comunicare con i server consolidato (non MFC), non inviare oggetti C++ nell'archivio.A meno che il server sia un'applicazione MFC che individua i tipi di oggetti si desidera inviare, non sarà possibile ricevere e deserializzare gli oggetti.Per materiale correlato in materia di comunicazione con le applicazioni non MFC, anche vedere l'articolo Windows Sockets: ordinamento di byte.

Il modello di programmazione di CSocket

Utilizzo di un oggetto di CSocket include creare e associare insieme diversi oggetti di classe MFC.Nella procedura successiva generale, ogni operazione viene effettuata da socket del server che di socket client, ad eccezione del passaggio 3, in cui ogni tipo di socket richiede un'azione diversa.

SuggerimentoSuggerimento

In fase di esecuzione, l'applicazione server in genere inizia prima di essere pronta e “in ascolto„ quando l'applicazione client individua una connessione.Se il server non è pronto quando il client tenta di connettersi, in genere si richiede l'applicazione dell'utente riprovare a connettersi nuovamente in un secondo momento.

Per impostare comunicazioni tra un socket del server e un socket client

  1. Costruire un oggetto di CSocket .

  2. Utilizzare l'oggetto per creare un handle sottostante di SOCKET .

    Per un oggetto client di CSocket , è necessario in genere utilizzare i parametri predefiniti a creare, a meno che non sia necessario un socket di datagramma.Per un oggetto server di CSocket , è necessario specificare una porta nella chiamata di Create .

    [!NOTA]

    CArchive non funziona con i socket di datagramma.Se si desidera utilizzare CSocket per un socket di datagramma, è necessario utilizzare la classe come utilizzare CAsyncSocket, ovvero, senza un archivio.Poiché i datagrams sono inaffidabili (non sicuro per ricevere e può essere ripetuto o fuori sequenza), non sono compatibili con la serializzazione attraverso un archivio.Richiedere un'operazione di serializzazione per completare in modo affidabile e in ordine.Se si tenta di utilizzare CSocket con un oggetto di CArchive per un datagram, un'asserzione MFC non riesce.

  3. Se il socket è un client, chiamare CAsyncSocket::Connect per connettere l'oggetto socket a un socket del server.

    In alternativa

    Se il socket è un server, la chiamata CAsyncSocket::Listen da avviare ascolto di connessione i tentativi da un client.Quando riceve una richiesta di connessione, accettarla chiamando CAsyncSocket::Accept.

    [!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.

  4. Creare un oggetto di CSocketFile , di associazione l'oggetto di CSocket con.

  5. Creare un oggetto di CArchive per il caricamento (ricevere) o archiviare i dati (inviare).L'archivio è associato all'oggetto di CSocketFile .

    Tenere presente che CArchive non funziona con i socket di datagramma.

  6. Utilizzare l'oggetto di CArchive ai dati della sessione tra i socket client e server.

    Tenere presente che un determinato oggetto di CArchive sposta i dati in una sola direzione: per il caricamento (ricevere) o archiviare (inviare).In alcuni casi, si utilizzerà due oggetti di CArchive : uno per inviare i dati, uno per la ricezione di ringraziamenti.

    Dopo avere accettato la connessione e l'installazione dell'archivio, è possibile eseguire tali attività come convalidare le password.

  7. Eliminare l'archivio, il file di socket gli oggetti e socket.

    [!NOTA]

    Classificare in viene fornito di CArchive la funzione membro di IsBufferEmpty in modo specifico per l'utilizzo con classe CSocket.Se il buffer contenente i messaggi di dati, ad esempio, è necessario eseguire il ciclo fino a leggere tutti e il buffer l'opzione sia deselezionata.In caso contrario, la notifica seguente che vi sono dati da ricevere può essere ritardata a oltranza.Utilizzare IsBufferEmpty per garantire che recupera tutti i dati.

L'articolo Windows Sockets: sequenza di operazioni illustrati entrambi i lati di questo processo con il codice di esempio.

Per ulteriori informazioni, vedere:

Vedere anche

Riferimenti

CSocket::Create

Concetti

In Windows Sockets MFC