Windows Sockets: sekwencja operacji
W tym artykule przedstawiono obok siebie, sekwencji operacji dla gniazda serwera i gniazdo klienta.Ponieważ używać gniazd CArchive obiektów, są one zawsze gniazda strumienia.
Kolejność operacji w komunikacji gniazda strumienia
Do momentu budowy CSocketFile obiektów, poniższa sekwencja jest dokładne (z niewielkimi różnicami parametr) dla obu CAsyncSocket i CSocket.Od tego momentu sekwencja jest ściśle dla CSocket.Następująca tabela ilustruje sekwencji operacji dla konfigurowania komunikacji między klientem serwerem.
Konfigurowanie komunikacji między serwerem i klientem
Serwer |
Client |
---|---|
// 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.Gdzie nPort jest numerem portu.Zobacz Windows Sockets: portów i adresów gniazd Aby uzyskać szczegółowe informacje o portach.
2.Serwer należy zawsze określić port, więc klienci mogą nawiązywać połączenia.Create wywołanie czasami również określa adres.Po stronie klienta należy użyć domyślne parametry, które zapytać MFC, aby używać wszystkich dostępnych portów.
3.Gdzie 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 "dotted numer" "127.54.67.32".Połącz funkcja sprawdza, czy adres jest numer kropkami (choć nie sprawdza zapewniające liczba jest prawidłowym komputerem w sieci).W przeciwnym razie Połącz przyjmuje nazwę komputera z jednym z innych formularzy.
5.Gdy wywołanie Zaakceptuj po stronie serwera przekazać odwołania do nowego obiektu gniazda.Należy najpierw tworzyć tego obiektu, ale nie wymagają Create dla niego.Należy pamiętać, że jeśli ten obiekt socket wychodzi zakresu, zamyka połączenie.Nowy obiekt łączy MFC GNIAZDO obsługi.Można skonstruować gniazda na stosie, jak pokazano lub na stercie.
6.Archiwum i plik gniazda są zamykane, gdy przejdą poza zakresem.Wzywa także destruktora gniazda obiektu Zamknij funkcji składowej dla gniazda obiektu, gdy obiekt znajdzie się poza zasięgiem lub nie zostanie usunięta.
Dodatkowe uwagi dotyczące sekwencji
Sekwencja wywołań pokazane w powyższej tabeli jest dla gniazda strumienia.Datagram gniazd, które są bezpołączeniowy, nie wymagają CAsyncSocket::Connect, słuchać, i Zaakceptuj wywołania (chociaż można opcjonalnie używać Połącz).Zamiast tego Jeśli używasz klasy CAsyncSocket, datagram nasadki użycie CAsyncSocket::SendTo i ReceiveFrom funkcji elementów członkowskich. (Jeśli używasz Połącz na gniazdo datagramu używane wysłać i Odbierz.) Ponieważ CArchive nie działa z datagramów, nie należy używać CSocket z archiwum w przypadku gniazdo datagramu.
Klasy nie obsługuje wszystkie CFilew funkcji; CFile elementy, takie jak Seek, który nie ma sensu w przypadku 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 przez CArchive obiektu dołączony do CSocketFile obiektu przy użyciu CEditView::SerializeRaw; Użyj CEditView::Serialize zamiast (nie udokumentowane).SerializeRaw Funkcja spodziewa obiektu pliku, aby mieć funkcje, takie jak Seek, że CSocketFile nie obsługuje.
Aby uzyskać więcej informacji, zobacz: