Windows Sockets: sequenza di operazioni

In questo articolo viene illustrato, affiancato, la sequenza delle operazioni per un socket del server e un socket 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 configurazione 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);

In alternativa

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

– oppure entrambi – 

// construct an archive

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

In alternativa

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

 – oppure entrambi – 

// use the archive to pass data:

arIn >> dwValue;

In alternativa

arOut << dwValue;6

// use the archive to pass data:

arIn >> dwValue;

In alternativa

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 dai client possono connettersi.La chiamata di Create talvolta viene 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 (IP) del protocollo internet.

4.Gli indirizzi reali possono assumere varie forme: “ftp.microsoft.com„, “microsoft.com„.Gli indirizzi IP utilizzano il “forma “127.54.67.32„ numero„ tratteggiato.La funzione di esecuzione di Connetti per verificare se l'indirizzo è un numero tratteggiato (anche se non controlli per fornire il numero è un computer valido 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 innanzitutto, ma non si chiama Create per.Tenere presente che se questo oggetto socket esce dall'ambito, la connessione verrà chiusa.MFC connette il nuovo oggetto a un handle di SOCKET .È possibile costruire di socket nello stack, illustrata, o nell'heap.

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

Note aggiuntive sulla sequenza

La sequenza di chiamate illustrate nella tabella precedente è relativo a un socket di flusso.I socket di datagramma, ovvero privi di connessione, non richiedono CAsyncSocket::Connect, Rimanere in ascoltoe le chiamate di accettare (sebbene sia possibile utilizzare facoltativamente 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 socket di datagramma, utilizzare Invia e Receive). Poiché CArchive non funziona con i datagrams, non utilizzare CSocket con un archivio se il socket è un datagram.

CSocketFile non supporta tutte le funzionalità dei entity_CODECFile; 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 anziché (non documentato).La funzione di SerializeRaw richiedere l'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

In Windows Sockets MFC