Windows Sockets: Kolejność operacji
W tym artykule przedstawiono obok siebie sekwencję operacji, gniazda serwera i gniazdo klienta.Ponieważ sockets CArchive obiektów, niekoniecznie są gniazda strumienia.
Kolejność operacji dla komunikacji gniazda strumienia
Do chwili konstruowania CSocketFile obiektu dokładne (z niewielkimi różnicami parametr) jest następująca sekwencja dla obu CAsyncSocket i CSocket.Od tego momentu sekwencja jest ściśle dla CSocket.Poniższa tabela ilustruje kolejność operacji dla konfigurowania komunikacji między klientem serwerem.
Konfigurowanie komunikacji między serwerem i klientem
Serwer |
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); - lub - CArchive arOut(&file,CArchive::store); – lub obu – |
// construct an archive CArchive arIn(&file, CArchive::load); - lub - CArchive arOut(&file,CArchive::store); – lub obu – |
// use the archive to pass data: arIn >> dwValue; - lub - arOut << dwValue;6 |
// use the archive to pass data: arIn >> dwValue; - lub - arOut << dwValue;6 |
1.Gdy nPort jest numerem portu.Zobacz Windows Sockets: portów i adresów gniazdo Aby uzyskać szczegółowe informacje o portach.
2.Serwer zawsze określić port połączenia się z klientami.Tworzenie wywołanie czasami również określa adres.Po stronie klienta należy użyć domyślne parametry, które poprosić MFC, aby użyć dowolnego dostępnego portu.
3.Gdy nPort jest numerem portu i strAddr jest adres komputera lub adres Internet Protocol (IP).
4.Adresy komputera może przybierać różne formy: "ftp.microsoft.com.", "microsoft.com".Adresy IP za pomocą formularza "kropkowane numer" "127.54.67.32".Połącz funkcja sprawdza, czy adres jest numer kropkami (chociaż nie sprawdza zapewnienia numer jest prawidłowy komputera w sieci).Jeśli nie, Połącz przyjmuje nazwę komputera z jednym z innych formularzy.
5.Po wywołaniu Zaakceptuj po stronie serwera, przekaże odwołanie do nowego obiektu gniazda.Należy najpierw tworzyć tego obiektu, ale nie wymagają Tworzenie dla niego.Należy pamiętać, że jeśli ten obiekt gniazda zgaśnie zakresu, zamyka połączenie.MFC łączy nowy obiekt GNIAZDO obsługi.Można utworzyć gniazda na stosie, jak pokazano lub na stercie.
6.Archiwum i pliku gniazda są zamknięte, kiedy wykraczają poza zakresem.Wymaga również obiektu gniazda destruktora Zamknij funkcji składowej obiektu gniazda obiekt wykracza poza zakres lub skreśla się.
Dodatkowe uwagi dotyczące sekwencji
Sekwencja wywołania pokazane w powyższej tabeli jest dla gniazda strumienia.Nie wymagają sockets datagram, które są bezpołączeniowy, CAsyncSocket::Connect, nasłuchiwania, i Zaakceptuj wywołania (chociaż można używać Połącz).Zamiast korzystania z klasy CAsyncSocket, datagram gniazd wykorzystania CAsyncSocket::SendTo i ReceiveFrom funkcji elementów członkowskich.(Jeżeli używasz Połącz z gniazdo datagramu, użyj wysłać i odbioru.) Ponieważ CArchive nie działa z datagramy, nie należy używać CSocket z archiwum Jeśli gniazdo datagramu.
CSocketFile nie obsługuje wszystkich CFilew funkcji; CFileCzłonkowie, takie jak Seek, który nie ma sensu komunikacji gniazda są niedostępne.Z tego powodu niektóre domyślne MFC Serialize funkcje nie są zgodne z CSocketFile.Jest to szczególnie istotne w CEditView klasy.Nie należy próbować serializować CEditView danych poprzez CArchive dołączony obiekt CSocketFile obiektu za pomocą CEditView::SerializeRaw; Użyj CEditView::Serialize zamiast (nie udokumentowano).SerializeRaw Funkcja spodziewa się obiektu pliku, aby funkcje, takie jak Seek, że CSocketFile nie obsługuje.
Aby uzyskać więcej informacji zobacz: