Windows Sockets: Sequenz von Vorgängen
In diesem Artikel wird parallel, die Folge von Vorgängen für einen Server und einen Client socket socket.Da die Sockets CArchive-Objekte verwenden, sind sie nicht unbedingt Streamsockets.
Sequenz von Vorgängen für eine Streamsocket-Kommunikation
Bis zum Zeitpunkt der Erstellung eines CSocketFile-Objekts, ist die folgende Reihenfolge (mit wenigen Parametern unterschieden) für CAsyncSocket und CSocket genau.Von diesem Zeitpunkt an, CSocket ausschließlich für die Sequenz ist.Die folgende Tabelle zeigt die Folge von Vorgängen zum Installieren von Kommunikation zwischen einem Client und einem Server.
Aufstellungs-Kommunikation zwischen einem Server und einem 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); - oder - CArchive arOut(&file,CArchive::store); – oder – |
// construct an archive CArchive arIn(&file, CArchive::load); - oder - CArchive arOut(&file,CArchive::store); – oder – |
// 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.Wo nPort eine Portnummer ist.Einzelheiten dazu finden Sie Windows-Sockets: Anschlüsse und Socket-Adressen Ports.
2.Der Server muss immer einen Port angeben, damit Clients eine Verbindung herstellen.Der Create Aufruf wird gelegentlich auch als Adresse an.Auf der Clientseite verwenden Sie die Standardparameter, die MFC anfordern, jeden verfügbaren Port zu verwenden.
3.Wo nPort eine Portnummer und strAddr eine Computeradresse oder eine Internetprotokolladresse (IP-Adresse) ist.
4.Computerumgebung Adressen können verschiedene Formen aufweisen: "ftp.microsoft.com", "microsoft.com".IP-Adressen verwenden das "durch Punkte getrennte Zahl-" Form "127.54.67.32".Die Verbinden-Funktionsüberprüfungen, um ein, wenn sich die Adresse durch Punkte getrennte Zahl ist (jedoch nicht überprüft, um sicherzustellen, der Zahl zu sehen ist ein gültiger Computer im Netzwerk).Wenn dies nicht der Fall ist, nimmt Verbinden einen Computernamen aus einem der anderen Formen dargestellt.
5.Wenn Sie Annehmen auf der Serverseite aufrufen, übergeben Sie einen Verweis auf ein neues Socket Objekt.Sie müssen dieses Objekt erstellen, Create jedoch nicht dafür an.Beachten Sie, dass, wenn dieser Socket Objekt den Gültigkeitsbereich verlässt, die Verbindung geschlossen wird.MFC schließt das neue Objekt zu einem SOCKET Handle an.Sie können den Socket auf dem Stapel oder gezeigt, wie auf dem Heap erstellt werden.
6.Das Archiv und die Datei Socket geschlossen werden, wenn sie den Gültigkeitsbereich verlassen.Der Destruktor des Socket Objekts ruft außerdem die Memberfunktion Verbinden Socket für das Objekt 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 vorangehenden Tabelle dargestellt werden, ist für einen Streamsocket.Datagrammsockets verbindungslos, die erforderlich sind, CAsyncSocket::Connect, die nicht Lauschen Sie und Übernehmen Sie Aufrufe (obwohl Sie können optional Verbinden).Wenn Sie CAsyncSocket-Klasse verwenden, verwenden Datagrammsockets die CAsyncSocket::SendTo und ReceiveFrom-Memberfunktionen.(Wenn Sie Verbinden mit einem Datagrammsocket verwenden, verwenden Sie Senden und Receive). Da CArchive nicht mit Datagramme zu arbeiten, verwenden Sie nicht CSocket mit einem Archiv, wenn der Socket ein Datagramm ist.
CSocketFile unterstützt nicht die gesamte Funktionalität von CFile. CFile-Member wie Seek, die keinen Sinn für einen Socket der Remotehostkommunikation sind, sind nicht verfügbar.Deswegen wird davon Serialize MFC mehrere Funktionen sind nicht kompatibel mit CSocketFile fest.Dies ist insbesondere von der CEditView-Klasse.Sie sollten nicht versuchen, CEditView Daten von einem CArchive-Objekt zu serialisieren, das in ein CSocketFile-Objekt mithilfe CEditView::SerializeRaw angefügt wird. Verwenden Sie stattdessen CEditView::Serialize (nicht dokumentierten).Die SerializeRaw-Funktion erwartet das Dateiobjekt, um Funktionen, z. B. Seek, das CSocketFile nicht unterstützt.
Weitere Informationen finden Sie unter: