Windows Sockets: sekwencja operacji

W tym artykule przedstawiono obok siebie sekwencje operacji dla gniazda serwera i gniazda klienta. Ponieważ gniazda używają CArchive obiektów, muszą być to gniazda strumienia.

Sekwencja operacji komunikacji gniazda usługi Stream

Do punktu konstruowania CSocketFile obiektu następująca sekwencja jest dokładna (z kilkoma różnicami między parametrami) dla obu CAsyncSocket i CSocket . Od tego momentu sekwencja jest ściśle dla CSocket . W poniższej tabeli przedstawiono sekwencję operacji związanych z konfigurowaniem komunikacji między klientem a serwerem.

Konfigurowanie komunikacji między serwerem a 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( );dwóch
// 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 ); 5000
// 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 oba-
// construct an archive

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

-lub-

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

-lub oba-
// use the archive to pass data:

arIn >> dwValue;

-lub-

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

arIn >> dwValue;

-lub-

arOut << dwValue;ust
  1. Gdzie NPort jest numerem portu. Zobacz Windows Sockets: porty i adresy gniazd, Aby uzyskać szczegółowe informacje o portach.

  2. Serwer musi zawsze określać port, aby klienci mogli nawiązywać połączenia. CreateWywołanie czasami określa również adres. Po stronie klienta Użyj parametrów domyślnych, które zadają MFC do użycia dowolnego dostępnego portu.

  3. Gdzie NPort jest numerem portu, a strAddr jest adresem komputera lub adresem IP.

  4. Adresy maszyn mogą mieć kilka form: "ftp.microsoft.com", "microsoft.com". Adresy IP używają formy "127.54.67.32" z kropką. ConnectFunkcja sprawdza, czy adres jest liczbą kropkowaną (chociaż nie sprawdza, czy jest to prawidłowy komputer w sieci). Jeśli nie, Connect przyjęto, że nazwa komputera jest jedną z pozostałych formularzy.

  5. Po wywołaniu po Accept stronie serwera zostanie przekazane odwołanie do nowego obiektu gniazda. Najpierw należy skonstruować ten obiekt, ale nie należy go wywoływać Create . Należy pamiętać, że jeśli ten obiekt gniazda wykracza poza zakres, połączenie zostanie zamknięte. MFC nawiązuje połączenie nowego obiektu z uchwytem gniazda . Możesz skonstruować gniazdo na stosie, jak pokazano na stercie lub na stosie.

  6. Archiwum i plik gniazda są zamykane, gdy wykraczają poza zakres. Destruktor obiektu gniazda wywołuje również funkcję zamykającego elementu członkowskiego dla obiektu gniazda, gdy obiekt wykracza poza zakres lub został usunięty.

Dodatkowe uwagi dotyczące sekwencji

Sekwencja wywołań przedstawionych w powyższej tabeli dotyczy gniazda strumienia. Gniazda datagramy, które są bezpołączeniowe, nie wymagają wywołań CAsyncSocket:: Connect, Listeni Accept (chociaż można opcjonalnie użyć Connect ). Zamiast tego, jeśli używasz klasy CAsyncSocket , gniazda datagramy używają CAsyncSocket::SendTo ReceiveFrom funkcji i. (Jeśli używasz Connect z gniazdem datagram, używasz Send i Receive .) Ponieważ program nie CArchive działa z Datagrams, nie należy używać go CSocket w archiwum, jeśli gniazdo jest datagramem.

Usługa CSocketFile nie obsługuje wszystkich CFile funkcji; CFile elementy członkowskie, takie jak Seek , które nie mają sensu komunikacji z gniazdem, są niedostępne. Z tego względu niektóre domyślne Serialize funkcje MFC nie są zgodne z programem CSocketFile . Jest to szczególnie prawdziwe w CEditView klasie. Nie należy próbować serializować CEditView danych za pomocą CArchive obiektu dołączonego do CSocketFile obiektu za pomocą CEditView::SerializeRaw ; Użyj CEditView::Serialize zamiast tego (nieudokumentowane). Funkcja SerializeRaw oczekuje, że obiekt pliku ma funkcje, takie jak Seek , które CSocketFile nie obsługuje.

Aby uzyskać więcej informacji, zobacz:

Zobacz też

Windows Sockets w MFC
Klasa CSocket
CAsyncSocket:: Create
CAsyncSocket:: Close