Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het gebruik van klasse
In dit artikel wordt uitgelegd hoe u klasse CAsyncSocketgebruikt. Deze klasse bevat de Windows Sockets-API op een zeer laag niveau.
CAsyncSocket is bedoeld voor programmeurs die netwerkcommunicatie in detail kennen, maar het gemak van callbacks willen voor meldingen van netwerkevenementen. Op basis van deze aanname biedt dit artikel alleen basisinstructie. U moet waarschijnlijk overwegen om te gebruiken CAsyncSocket als u wilt dat Windows Sockets het gemak van het omgaan met meerdere netwerkprotocollen in een MFC-toepassing, maar geen flexibiliteit wilt opofferen. Het kan ook zijn dat u een betere efficiëntie bereikt door de communicatie directer te programmeren dan het algemene alternatieve model van klasse CSocket te gebruiken.
CAsyncSocket wordt beschreven in de MFC-verwijzing. Visual C++ levert ook de Windows Sockets-specificatie, die zich in de Windows SDK bevindt. De details worden aan u overgelaten. Visual C++ levert geen voorbeeldtoepassing voor CAsyncSocket.
Als u niet goed geïnformeerd bent over netwerkcommunicatie en een eenvoudige oplossing wilt, gebruikt u klasse CSocket met een CArchive object. Zie Windows Sockets: Sockets gebruiken met archieven voor meer informatie.
In dit artikel wordt het volgende behandeld:
Een
CAsyncSocketobject maken en gebruiken.
Het maken en gebruiken van een CAsyncSocket
Om CAsyncSocket te gebruiken
Maak een
CAsyncSocketobject en gebruik het object om de onderliggendeSOCKETingang te maken.Het maken van een socket volgt het MFC-patroon van een constructie in twee fasen.
Voorbeeld:
CAsyncSocket sock; sock.Create(); // Use the default parameters– of –
CAsyncSocket *pSocket = new CAsyncSocket; int nPort = 27; pSocket->Create(nPort, SOCK_DGRAM);Met de eerste constructor hierboven wordt een
CAsyncSocketobject op de stack gemaakt. De tweede constructor maakt eenCAsyncSocketop de heap. In de eersteCreateaanroep hierboven worden de standaardparameters gebruikt om een stroomsocket te maken. Met de tweedeCreateaanroep wordt een datagramsocket gemaakt met een opgegeven poort en een opgegeven adres. (U kunt beideCreateversies gebruiken met beide constructiemethoden.)De parameters voor
Createzijn:Een "poort": een kort getal.
Voor een serversocket moet u een poort opgeven. Voor een clientsocket accepteert u doorgaans de standaardwaarde voor deze parameter, waarmee Windows Sockets een poort kan selecteren.
Een sockettype:
SOCK_STREAM(de standaardinstelling) ofSOCK_DGRAM.Een socketadres, zoals
"ftp.microsoft.com"of"128.56.22.8".Dit is uw IP-adres (Internet Protocol) in het netwerk. U zult waarschijnlijk altijd afhankelijk zijn van de standaardwaarde voor deze parameter.
De termen 'poort' en 'socketadres' worden uitgelegd in Windows Sockets: poorten en socketadressen.
Als de socket een client is, verbindt u het socketobject met een serversocket met behulp van
CAsyncSocket::Connect.– of –
Als de socket een server is, stel de socket dan in om te luisteren voor verbindingspogingen van een client (met
CAsyncSocket::Listen). Accepteer de verbinding metCAsyncSocket::Acceptbij ontvangst van een verbindingsaanvraag.Nadat u een verbinding hebt geaccepteerd, kunt u taken uitvoeren, zoals het valideren van wachtwoorden.
Notitie
De
Acceptlidfunctie verwijst naar een nieuw, leegCSocketobject als parameter. U moet dit object maken voordat u aanroeptAccept. Als dit socketobject buiten het bereik valt, wordt de verbinding gesloten. GebruikCreateniet voor dit nieuwe socket-object. Zie het artikel Windows Sockets: Reeks bewerkingen voor een voorbeeld.Voer communicatie uit met andere sockets door de lidfuncties van het
CAsyncSocketobject aan te roepen die de Windows Sockets-API-functies inkapselen.Zie de specificatie en klasse
CAsyncSocketvan Windows Sockets in de MFC-verwijzing.Vernietig het
CAsyncSocketobject.Als u het socketobject op de stack hebt gemaakt, wordt de destructor aangeroepen wanneer de betreffende functie buiten het bereik komt. Als u het socketobject op de heap hebt gemaakt met behulp van de
newoperator, bent u verantwoordelijk voor het gebruik van dedeleteoperator om het object te vernietigen.De destructor roept de lidfunctie van het object
Closeaan voordat het object wordt vernietigd.
Zie CSocket voor een voorbeeld van deze reeks in code (eigenlijk voor een object).
Uw verantwoordelijkheden bij CAsyncSocket
Wanneer u een object van klasse CAsyncSocketmaakt, bevat het object een Windows-ingang SOCKET en levert bewerkingen op die ingang. Wanneer u gebruikt CAsyncSocket, moet u alle problemen oplossen die u mogelijk ondervindt als u de API rechtstreeks gebruikt. Voorbeeld:
Blokkerende scenario's.
Bytevolgordeverschillen tussen de verzendende en ontvangende machines.
Converteren tussen Unicode- en MBCS-tekenreeksen (Multibyte Character Set).
Zie Windows Sockets: Blocking, Windows Sockets: Byte Ordering, Windows Sockets: Converting Strings voor definities van deze termen en aanvullende informatie.
Ondanks deze problemen is klasse CAsyncSocket mogelijk de juiste keuze voor u als uw toepassing alle flexibiliteit en controle vereist die u kunt krijgen. Als dat niet het is, kunt u in plaats daarvan klasse CSocket gebruiken.
CSocket verbergt veel details van u: het pompt Windows-berichten tijdens het blokkeren van oproepen en geeft u toegang tot CArchive, waarmee bytevolgordeverschillen en tekenreeksconversie voor u worden beheerd.
Zie voor meer informatie: