Dela via


Windows Sockets: Åtgärdssekvens

Den här artikeln illustrerar, sida vid sida, sekvensen av åtgärder för en server socket och en klient socket. Eftersom socketarna använder CArchive objekt är de nödvändigtvis strömuttag.

Sekvens av åtgärder för en Stream Socket-kommunikation

Fram till punkt för konstruktionen av ett CSocketFile objekt är den följande sekvensen korrekt (med vissa parametrar som skiljer sig åt) för både CAsyncSocket och CSocket. Från och med då är sekvensen strikt för CSocket. I följande tabell visas sekvensen med åtgärder för att konfigurera kommunikation mellan en klient och en server.

Konfigurera kommunikation mellan en server och en klient

Server Klient
// 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);

-eller-

CArchive arOut(&file, CArchive::store);

- eller båda -
// construct an archive

CArchive arIn(&file, CArchive::load);

-eller-

CArchive arOut(&file, CArchive::store);

- eller båda -
// use the archive to pass data:

arIn >> dwValue;

-eller-

arOut << dwValue;6
// use the archive to pass data:

arIn >> dwValue;

-eller-

arOut << dwValue;6
  1. Där nPort är ett portnummer. Mer information om portar finns i Windows Sockets: Portar och Socket-adresser .

  2. Servern måste alltid ange en port så att klienter kan ansluta. Anropet Create anger ibland även en adress. På klientsidan använder du standardparametrarna, som ber MFC att använda valfri tillgänglig port.

  3. Där nPort är ett portnummer och strAddr är en datoradress eller en IP-adress (Internet Protocol).

  4. Datoradresser kan ha flera former: "ftp.microsoft.com", "microsoft.com". IP-adresser använder formen "punkterad siffra" "127.54.67.32". Funktionen Connect kontrollerar om adressen är ett dottat nummer (dock kontrollerar den inte att numret är en giltig enhet på nätverket). Om inte, Connect förutsätter ett datornamn för ett av de andra formulären.

  5. När du anropar Accept på serversidan skickar du en referens till ett nytt socketobjekt. Du måste skapa det här objektet först, men anropa Create inte för det. Tänk på att om det här socketobjektet hamnar utanför omfånget stängs anslutningen. MFC ansluter det nya objektet till ett SOCKET-handtag . Du kan konstruera socketen på stacken, som du ser, eller på heapen.

  6. Arkivet och socketfilen stängs när de hamnar utanför omfånget. Socket-objektets destruktorn anropar också medlemsfunktionen Close för socketobjektet när objektet går ut ur sin scope eller tas bort.

Ytterligare kommentarer om sekvensen

Sekvensen med anrop som visas i föregående tabell är för en strömsocket. Datagram sockets, som är anslutningslösa, kräver inte CAsyncSocket::Connect, Listen och Accept-anrop (även om du kan använda Connect). Om du istället använder klassen CAsyncSocket, använd datagram sockets CAsyncSocket::SendTo- och ReceiveFrom-medlemsfunktionerna. (Om du använder Connect med ett datagramsocket använder Send du och Receive.) Eftersom CArchive inte fungerar med datagram ska du inte använda CSocket med ett arkiv om socketen är ett datagram.

CSocketFile stöder inte alla CFilefunktioner. CFile Medlemmar som Seek, som inte är meningsfulla för en socketkommunikation, är inte tillgängliga. Därför är vissa standardfunktioner för MFC Serialize inte kompatibla med CSocketFile. Detta gäller särskilt för CEditView klassen. Du bör inte försöka serialisera CEditView data via ett CArchive objekt som är kopplat till ett CSocketFile objekt med hjälp av CEditView::SerializeRaw; använd CEditView::Serialize i stället (inte dokumenterat). SerializeRaw-funktionen förväntar sig att filobjektet har funktioner, till exempel , som SeekCSocketFile inte stöder.

Mer information finns i:

Se även

Windows Sockets i MFC
CSocket-klass
CAsyncSocket::Create
CAsyncSocket::Close