Windows Sockets: Reihenfolge der Operationen
Dieser Artikel veranschaulicht, parallel, die Reihenfolge der Vorgänge für einen Serversocket und einen Clientsocket. Da die Sockets CArchive-Objekte verwenden, weisen diese immer eine Streamsockets.
Sequenz von Vorgängen für eine Streamsocket-Kommunikation
Bis zum Punkt zum Erstellen eines CSocketFile-Objekts, ist die folgende Sequenz (mit einigen Parameterunterschieden) für CAsyncSocket und CSocket genau. Von diesem Zeitpunkt an, ist die Sequenz nur für CSocket. Die folgende Tabelle zeigt die Reihenfolge der Vorgänge zum Installieren von Kommunikation zwischen einem Client und einem Server.
Aufstellungs-Kommunikation zwischen einem Client und einem Server
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); - oder - CArchive arOut(&file, CArchive::store); - oder beide - |
// construct an archive CArchive arIn(&file, CArchive::load); - oder - CArchive arOut(&file, CArchive::store); - oder beide - |
// use the archive to pass data: arIn >> dwValue; - oder - arOut << dwValue;6 |
// use the archive to pass data: arIn >> dwValue; - oder - arOut << dwValue;6 |
1. Dabei ist nPort eine Portnummer ist. Siehe Windows Sockets: Anschlüsse und Socket-Adressen Details darüber Ports.
2. Der Server muss einem Port immer angeben, daher können Clients herstellen. Erstellen Der Aufruf wird manchmal auch einer Adresse an. auf der Clientseite verwenden Sie die Standardparameter, die MFC anfordern, einen beliebigen verfügbaren Anschluss verwenden.
3. Wo nPort ist, ist eine Portnummer und ein strAddr eine Computeradresse Internetprotokoll (ip)- oder eine Adresse.
4. Computeradressen können verschiedene Formen aufweisen: "ftp.microsoft.com", "microsoft.com". IP-Adressen verwenden das "durch Punkte getrennte Zahlen-" Formular "127.54.67.32". Die Verbinden-Funktionsüberprüfungen, um, wenn die Adresse eine durch Punkte getrennte Zahl ist (obwohl sie nicht überprüft, um sicherzustellen, Zahl- zu finden ist ein gültiger Computer im Netzwerk). Wenn nicht, wird Verbinden einen Computernamen aus einem der anderen Formate an.
5. Wenn Sie Annehmen auf Serverseite aufrufen, übergeben Sie einen Verweis auf einen neuen Socketobjekt. Sie müssen dieses Objekt zuerst erstellen, aber rufen Erstellen nicht für sie auf. Beachten Sie, dass, wenn dieses Socketobjekt des Gültigkeitsbereichs, die Verbindung schließt. MFC enthält das neue Objekt auf SOCKET Handle an. Sie können den Socket auf dem Stapel, wie dargestellt oder auf dem Heap erstellt.
6. Das Archiv und die Socketdatei werden geschlossen, wenn sie den Gültigkeitsbereich verlassen. Der Destruktor des Socketobjekts ruft außerdem die Schließen für das Socketobjekt Memberfunktion auf, wenn das Objekt den Gültigkeitsbereich verlässt oder gelöscht wird.
Zusätzliche Hinweise zur Sequenz
Die Sequenz von Aufrufen, die in der vorherigen Tabelle aufgeführt sind, ist für einen Streamsocket. Datagrammsockets, die verbindungslos sind, benötigen nicht CAsyncSocket::Connect, Lauschen Sie und Annehmen aufgerufen (obwohl Sie Verbinden optional verwenden können). Sie stattdessen Klasse CAsyncSocket verwenden, verwenden Datagrammsockets die Memberfunktionen CAsyncSocket::SendTo und ReceiveFrom. (Wenn Sie Verbinden mit einem Datagrammsocket verwenden, verwenden Sie Senden und Empfangen.) Da CArchive nicht mit Datagrammen funktioniert, verwenden Sie nicht CSocket mit einem Archiv, wenn der Socket ein Datagramm ist.
CSocketFile unterstützt nicht alle CFile-Funktionen; CFile-Member wie Seek, die nicht sinnvoll für eine Socketkommunikation sind, sind nicht verfügbar. Deswegen nehmen einige Funktionen MFC Serialize sind nicht kompatibel mit CSocketFile den Standardwert an. Dies ist von der CEditView-Klasse insbesondere. Versuchen Sie nicht, Daten über CEditView ein CArchive zu serialisierende Objekt, das auf ein CSocketFile-Objekt mit CEditView::SerializeRaw angefügt wird; Verwenden Sie stattdessen CEditView::Serialize (nicht dokumentiert). Die SerializeRaw-Funktion erwartet das Dateiobjekt, um Funktionen, z Seek haben, das CSocketFile nicht unterstützt.
Weitere Informationen finden Sie unter: