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.
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 socketCSocket sockSrvr; |
// construct a socketCSocket sockClient; |
// create the SOCKETsockSrvr.Create(nPort);1,2 |
// create the SOCKETsockClient.Create( );2 |
// start listeningsockSrvr.Listen( ); |
|
// seek a connectionsockClient.Connect(strAddr, nPort);3,4 |
|
// construct a new, empty socketCSocket sockRecv;// accept connectionsockSrvr.Accept( sockRecv ); 5 |
|
// construct file objectCSocketFile file(&sockRecv); |
// construct file objectCSocketFile file(&sockClient); |
// construct an archiveCArchive arIn(&file, CArchive::load);-eller- CArchive arOut(&file, CArchive::store);- eller båda - |
// construct an archiveCArchive 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 |
Där nPort är ett portnummer. Mer information om portar finns i Windows Sockets: Portar och Socket-adresser .
Servern måste alltid ange en port så att klienter kan ansluta. Anropet
Createanger ibland även en adress. På klientsidan använder du standardparametrarna, som ber MFC att använda valfri tillgänglig port.Där nPort är ett portnummer och strAddr är en datoradress eller en IP-adress (Internet Protocol).
Datoradresser kan ha flera former: "ftp.microsoft.com", "microsoft.com". IP-adresser använder formen "punkterad siffra" "127.54.67.32". Funktionen
Connectkontrollerar om adressen är ett dottat nummer (dock kontrollerar den inte att numret är en giltig enhet på nätverket). Om inte,Connectförutsätter ett datornamn för ett av de andra formulären.När du anropar
Acceptpå serversidan skickar du en referens till ett nytt socketobjekt. Du måste skapa det här objektet först, men anropaCreateinte 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.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