Windows Sockets: Posloupnost operací
Tento článek ukazuje vedle sebe, posloupnost operací pro server socket a klient soket.Vzhledem k tomu, že do zásuvek pomocí CArchive objekty jsou nutně soketů proudu.
Sekvence operací pro komunikace soketů proudu
Až do okamžiku konstrukce CSocketFile objektu je následující posloupnost přesné (s několika rozdíly parametr) pro obě CAsyncSocket a CSocket.Od této chvíle sekvence je výhradně pro CSocket.Následující tabulka popisuje posloupnost operací pro nastavení komunikace mezi klientem a serverem.
Nastavení komunikace mezi serverem a klientem
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); -nebo- CArchive arOut(&file, CArchive::store); – nebo obojí – |
// construct an archive CArchive arIn(&file, CArchive::load); -nebo- CArchive arOut(&file, CArchive::store); – nebo obojí – |
// use the archive to pass data: arIn >> dwValue; -nebo- arOut << dwValue;6 |
// use the archive to pass data: arIn >> dwValue; -nebo- arOut << dwValue;6 |
1.Kde nPort je číslo portu.Viz Windows Sockets: porty a adresy soketu Další informace o portech.
2.Server musíte vždy určit port, takže klienti se mohou připojit.Vytvořit volání někdy také určuje adresu.Na straně klienta pomocí výchozí parametry, které vyzve knihovny MFC použití portu k dispozici.
3.Kde nPort je číslo portu a strAddr je adresa počítače nebo adresu Internet Protocol (IP).
4.Adresy počítačů lze provést několika způsoby: "ftp.microsoft.com", "microsoft.com".Adresy IP pomocí formuláře "tečkované číslo" "127.54.67.32".Připojit funkce zkontroluje, pokud je adresa tečkovaný číslo (i když jej nekontroluje ověřte číslo je platné počítače v síti).Není-li Připojit předpokládá název počítače jeden z formulářů.
5.Při volání přijmout na straně serveru předat odkaz na nový objekt.Je nutné nejprve vytvořit objekt, ale nevyžadují vytvořit pro něj.Mějte na paměti, že pokud tento objekt soketu zhasne oboru a ukončí připojení.MFC připojí nový objekt, který SOCKET zpracování.Můžete vytvořit soket zásobníku, jak je znázorněno nebo na haldě.
6.Archiv a soubor soketu jsou uzavřeny, pokud přesahují rozsah platnosti.Také volání destruktoru objektu soketu Zavřít členské funkce pro socket objekt při přechodu mimo z rozsahu nebo odstranění objektu.
Další poznámky o pořadí
Stream soket je posloupnost volání uvedené v předchozí tabulce.Datagram soketů, které jsou bez připojení, nevyžaduje CAsyncSocket::Connect, naslouchat, a přijmout volání (i když můžete volitelně použít Připojit).Místo toho při použití třídy CAsyncSocket, datagram sockets použití CAsyncSocket::SendTo a ReceiveFrom členské funkce. (Při použití Připojit s datagramový soket pomocí Odeslat a příjem.) Vzhledem k tomu, CArchive nefunguje s datagramy, nepoužívejte CSocket se do archivu, je-li soketu datagram.
CSocketFile nepodporuje všechny CFilejeho funkce; CFile členů, jako Seek, který žádný smysl pro socket komunikace, nejsou k dispozici.Z tohoto důvodu některé výchozí knihovny MFC Serialize funkcí nejsou kompatibilní s CSocketFile.To platí zejména o CEditView třídy.By se neměl pokoušet serializovat CEditView data prostřednictvím CArchive objekt připojen k CSocketFile objektu pomocí CEditView::SerializeRaw; použít CEditView::Serialize místo (není popsána).SerializeRaw funkce očekává objektu souboru, aby se funkce, jako například Seek, že CSocketFile nepodporuje.
Další informace naleznete v části: