Udostępnij za pośrednictwem


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:

Zobacz też

Informacje

Klasa CSocket

CAsyncSocket::Create

CAsyncSocket::Close

Koncepcje

Windows Sockets w MFC