Condividi tramite


Windows Sockets: sequenza di operazioni

In questo articolo viene illustrato, side-by-side, la sequenza delle operazioni per un socket del server e un blocco client. Poiché i socket utilizzano oggetti di CArchive, sono necessariamente socket di flusso.

Sequenza delle operazioni per una comunicazione di socket di flusso

Fino al punto di costruzione dell'oggetto di CSocketFile, la seguente sequenza accurata (con alcune differenze di parametro) sia per CAsyncSocket che CSocket. Da quel momento in poi, la sequenza è esclusivamente per CSocket. Nella tabella riportata la sequenza delle operazioni per l'installazione di comunicazione tra un client e un server.

Comunicazione di setting up tra un server e un client

Server

Client

// construct a socket

CSocket sockSrvr;

// construct a socket

CSocket sockClient;

// create the SOCKET

sockSrvr.Create(nPort);1,2

// create the SOCKET

sockClient.Create( );2

// start listening

sockSrvr.Listen( );

 

 

// seek a connection

sockClient.Connect(strAddr, nPort);3,4

// construct a new, empty socket

CSocket sockRecv;

// accept connection

sockSrvr.Accept( sockRecv ); 5

 

// construct file object

CSocketFile file(&sockRecv);

// construct file object

CSocketFile file(&sockClient);

// construct an archive

CArchive arIn(&file,            CArchive::load);

- oppure -

CArchive arOut(&file,           CArchive::store);

- o entrambi - 

// construct an archive

CArchive arIn(&file,            CArchive::load);

- oppure -

CArchive arOut(&file,           CArchive::store);

 - o entrambi - 

// use the archive to pass data:

arIn >> dwValue;

- oppure -

arOut << dwValue;6

// use the archive to pass data:

arIn >> dwValue;

- oppure -

arOut << dwValue;6

1. Dove nPort è un numero di porta. Vedere Windows Sockets: Porte e indirizzi di socket per informazioni dettagliate sulle porte.

2. Il server deve specificare sempre una porta in modo che i client possono connettersi. La chiamata di Crea talvolta anche specificato un indirizzo. Sul lato client, utilizzare i parametri predefiniti, che richiede a MFC di utilizzare qualsiasi porta disponibile.

3. Dove nPort è un numero di porta e uno strAddr è l'indirizzo di un computer o un indirizzo di (IP) del protocollo Internet.

4. Gli indirizzi reali possono assumere varie forme: "ftp.microsoft.com", "microsoft.com". Gli indirizzi IP "utilizzano il formato "127.54.67.32" numero" tratteggiato. Le verifiche di esecuzione di Connetti per verificare se l'indirizzo è un numero tratteggiato (anche se non controlli per specificare il numero è valido un computer nella rete). In caso contrario, Connetti presuppone un nome del computer di uno degli altri form.

5. Quando si chiama Accetta sul lato server, passare un riferimento a un nuovo oggetto socket. È necessario costruire l'oggetto in primo luogo, ma non vengono chiamate per Crea. Tenere presente che se questo oggetto socket dall'ambito, la connessione verrà chiusa. MFC connette il nuovo oggetto a un handle di SOCKET. È possibile costruire il blocco sullo stack, illustrata, o nell'heap.

6. L'archivio e il file di socket siano chiusi quando escono di ambito. Il distruttore di oggetti socket inoltre chiama la funzione membro di Chiudi per l'oggetto socket quando l'oggetto dall'ambito o eliminato.

Note aggiuntive sulla sequenza

La sequenza di chiamate illustrate nella tabella precedente è relativo un socket di flusso. I socket di datagramma, ovvero privi di connessione, non richiedono CAsyncSocket::Connect, È in ascolto e chiamate di Accetta (sebbene sia possibile utilizzare Connetti). Al contrario, se si utilizza la classe CAsyncSocket, sockets di datagramma utilizzano funzioni membro di ReceiveFrom e di CAsyncSocket::SendTo. Se si utilizza Connetti con un blocco di datagramma, utilizzare Invia e Ricezione). Poiché CArchive non ha effetto sui datagrams, non utilizzare CSocket con un archivio se il blocco è un datagram.

CSocketFile non supporta tutte le funzionalità di CFile ; i membri di CFile come Seek, che non hanno un significato per una comunicazione di socket, non sono disponibili. Per questo motivo, alcuni impostazione predefinita le funzioni MFC Serialize non sono compatibili con CSocketFile. Ciò è particolarmente vero per la classe di CEditView. Non tentare di serializzare i dati di CEditView tramite un oggetto di CArchive associato a un oggetto di CSocketFile utilizzando CEditView::SerializeRaw; utilizzo CEditView::Serialize invece non documentato). La funzione di SerializeRaw richiedere all'oggetto file per avere funzioni, come Seek, che CSocketFile non supporta.

Per ulteriori informazioni, vedere:

Vedere anche

Riferimenti

Classe CSocket

CAsyncSocket::Create

CAsyncSocket::Close

Concetti

Windows Sockets in MFC