Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här artikeln beskrivs programmeringsmodellen CSocket.
CSocket för klass tillhandahåller socketstöd på en högre abstraktionsnivå än klass CAsyncSocket.
CSocket använder en version av MFC-serialiseringsprotokollet för att skicka data till och från ett socketobjekt via ett MFC CArchive-objekt .
CSocket tillhandahåller blockering (vid hantering av bakgrundsbearbetning av Windows-meddelanden) och ger dig åtkomst till CArchive, som hanterar många aspekter av kommunikationen som du skulle behöva göra själv med antingen rå-API:et eller klassen CAsyncSocket.
Tips/Råd
Du kan använda klassen CSocket på egen hand som en mer praktisk version av CAsyncSocket, men den enklaste programmeringsmodellen är att använda CSocket med ett CArchive objekt.
Mer information om hur implementeringen av socketar med arkiv fungerar finns i Windows Sockets: How Sockets with Archives Work (Så fungerar socketar med arkiv). Exempelkod finns i Windows Sockets: Sequence of Operations och Windows Sockets: Example of Sockets Using Archives. Information om några av de funktioner som du kan få genom att härleda dina egna klasser från socketklasserna finns i Windows Sockets: Deriving from Socket Classes (Windows Sockets: Deriving from Socket Classes).
Anmärkning
Om du skriver ett MFC-klientprogram för att kommunicera med etablerade servrar (icke-MFC) ska du inte skicka C++-objekt via arkivet. Om inte servern är ett MFC-program som förstår vilka typer av objekt du vill skicka kan den inte ta emot och deserialisera dina objekt. Relaterat material om att kommunicera med icke-MFC-program finns också i artikeln Windows Sockets: Byte Ordering.
CSocket-programmeringsmodellen
Att använda ett CSocket objekt innebär att skapa och associera flera MFC-klassobjekt. I den allmänna proceduren nedan utförs varje steg av både server-socketen och klientsocket, förutom steg 3, där varje sockettyp kräver en annan åtgärd.
Tips/Råd
Vid körning startar serverprogrammet vanligtvis först för att vara redo och "lyssna" när klientprogrammet söker efter en anslutning. Om servern inte är redo när klienten försöker ansluta kräver du vanligtvis att användarprogrammet försöker ansluta igen senare.
Så här konfigurerar du kommunikation mellan en server-socket och en klientsocket
Skapa ett CSocket-objekt .
Använd -objektet för att skapa det underliggande SOCKET-handtaget .
För ett
CSocketklientobjekt bör du normalt använda standardparametrarna till Skapa, såvida du inte behöver ett datagramsocket. För ettCSocketserverobjekt måste du ange en port i anropetCreate.Anmärkning
CArchivefungerar inte med datagram sockets. Om du vill användaCSocketför en datagramsocket måste du använda klassen som du skulle användaCAsyncSocket, det vill sa utan arkiv. Eftersom datagram är otillförlitliga (det garanteras inte att de tas emot, kan upprepas eller tas emot i fel ordning) är de inte kompatibla med serialisering via ett arkiv. Du förväntar dig att en serialiseringsåtgärd slutförs på ett tillförlitligt sätt och i ordning. Om du försöker användaCSocketmed ettCArchiveobjekt för ett datagram misslyckas en MFC-försäkran.Om socketen är en klient anropar du CAsyncSocket::Anslut för att ansluta socketobjektet till en server socket.
-eller-
Om socketen är en server anropar du CAsyncSocket::Lyssna för att börja lyssna efter anslutningsförsök från en klient. När du tar emot en anslutningsbegäran godkänner du den genom att anropa CAsyncSocket::Accept.
Anmärkning
Medlemsfunktionen
Acceptanvänder en referens till ett nytt, tomtCSocketobjekt som parameter. Du måste skapa det här objektet innan du anroparAccept. Om det här socketobjektet hamnar utanför omfånget stängs anslutningen. AnropaCreateinte för det nya socketobjektet.Skapa ett CSocketFile-objekt som associerar
CSocketobjektet med det.Skapa ett CArchive-objekt för att antingen läsa in (ta emot) eller lagra (skicka) data. Arkivet är associerat med objektet
CSocketFile.Tänk på att
CArchivedet inte fungerar med datagram-socketar.Använd -
CArchiveobjektet för att skicka data mellan klient- och server-socketarna.Tänk på att ett visst
CArchiveobjekt endast flyttar data i en riktning: antingen för inläsning (mottagning) eller lagring (sändning). I vissa fall använder du tvåCArchiveobjekt: ett för att skicka data, det andra för att ta emot bekräftelser.När du har accepterat en anslutning och konfigurerat arkivet kan du utföra sådana uppgifter som att verifiera lösenord.
Förstör arkivet, socket-filen och socket-objekten.
Anmärkning
Klassen
CArchivetillhandahållerIsBufferEmptymedlemsfunktionen specifikt för användning med klassenCSocket. Om bufferten innehåller flera datameddelanden måste du till exempel loopa tills alla har lästs och bufferten har rensats. I annat fall kan nästa meddelande om att det finns data som ska tas emot fördröjas på obestämd tid. AnvändIsBufferEmptyför att säkerställa att du hämtar alla data.
Artikeln Windows Sockets: Sequence of Operations illustrerar båda sidor av den här processen med exempelkod.
Mer information finns i: