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: