To tylko jedna z 12 stron tej notatki. Zaloguj się aby zobaczyć ten dokument.
Zobacz
całą notatkę
Gniazda w MS Windows. Biblioteka Winsock. Inicjalizacja Winsock. Niezbędne pliki nagłówkowe to Winsock.h (starsza wersja biblioteki Winsock - 1.1) lub Winsock2.h (wersja Winsock 2.2). Należy dołączyć plik biblioteczny ws2_32.lib.
W Windows CE oraz Windows 95 dostępna jest wersja 1.1. W nowszych wersjach Windows 95 oraz w Windows 98, Windows Me, Windows NT 4.0, Windows 2000 dostępna jest wersja 2.2 biblioteki.
Przed wywołaniem dowolnej funkcji Winsock należy załadować poprawną wersję biblioteki Winsock. Funkcją, która to realizuje jest WSAStartup:
int WSAStartup ( WORD wVersionRequested, LPWSADATA lpWSAData) Pierwszy parametr określa wersję biblioteki Winsock, którą chcemy załadować (obecnie najnowszą wersją jest 2.2). Dla wersji 2.2 należy podać wartość 0x0202 lub skorzystać z makra MAKEWORD(2,2). Starszy bajt określa numer podwersji, młodszy określa główny numer wersji.
Drugim parametrem (typ LPWSADATA) jest wskaźnik do struktury WSAData. Struktura ta zawiera informacje o załadowanej wersji Winsock. Wskaźnik do odpowiednio uzupełnionej struktury jest zwracany przez funkcję WSAStartup.
Opis struktury WSAData:
typedef struct WSAData {
WORD wVersion; // wersja Winsock, której chce używać funkcja wywołująca
WORD wHighVersion; // najwyższa wersja Winsock obsługiwana przez // załadowaną bibliotekę
char szDescription[WSADESCRIPTION_LEN+1]; // opis tekstowy // załadowanej biblioteki
char szSystemStatus[WSASYS_STATUS_LEN+1]; // opis stanu i
// konfiguracji
unsigned short iMaxSockets; // maks. liczba gniazd - pole ignorowane w Winsock // powyżej wersji 2
unsigned short iMaxUdpDg; // maks. rozmiar datagramu UDP - pole ignorowane w // Winsock powyżej wersji 2
char FAR * lpVendorInfo; // info. o sprzedawcy - pole ignorowane w Winsock // powyżej wersji 2
} WSADATA, FAR * LPWSADATA;
W Win32 FAR jest ignorowane!
Po zakończeniu korzystania z biblioteki Winsock bależy wywołać funkcję WSACleanup(), która usunie bibliotekę z pamięci i zwolni zasoby.
Otwieranie gniazd. W Win32 gniazdo nie jest identyfikowane przez deskryptor taki jak deskryptor pliku. Utworzony jest typ SOCKET (w Winsock2.h i Winsock.h) - jako UINT_PTR (zdefiniowane w basetsd.h jako unsigned int o rozmiarze takim jak wskaźnik).
Większość nazw rozbudowanych funkcji dotyczących gniazd w Winsock 2.2 rozpoczyna się od liter WSA. Tego przedrostka nie ma większość funkcji z Winsock 1.1 (za wyjątkiem np. WSAStartup i WSACleanup). Winsock 2.2 umożliwia stosowanie podstawowych funkcji z Winsock 1.1 (bez przedrostka WSA).
(…)
…] [-i:IP] [-o]\n\n");
printf(" -p:x Numer nasluchujacego portu \n");
printf(" -i:str Nasluchujacy interfejs \n");
printf(" -o Tylko odbior, bez odsylania\n\n");
ExitProcess(1);
}
//
// Funkcja: ValidateArgs
//
// Opis:
// Analiza argumentów wiersza poleceń i ustalenie wartości
// niektórych zmiennych globalnych, decydujących o wykonaniu
// określonych czynności.
//
void ValidateArgs(int argc, char **argv…
…
// przez serwer.
//
// Kompilacja:
// cl -o Client Client.c ws2_32.lib
//
// Opcje wiersza poleceń:
// client [-p:x] [-s:IP] [-n:x] [-o]
// -p:x Numer odległego portu
// -s:IP Adres IP serwera lub nazwa węzła
// -n:x Liczba wysyłanych wiadomości
// -o Tylko wysyłanie, bez odbioru
//
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#define DEFAULT_COUNT 3
#define DEFAULT_PORT 5250
#define…
…
//
void usage()
{
printf("uzycie: client [-p:x] [-s:IP] [-n:x] [-o]\n\n");
printf(" -p:x Numer odleglego portu\n");
printf(" -s:IP Adres IP serwera lub nazwa stacji\n");
printf(" -n:x Ilosc nadan wiadomosci\n");
printf(" -o Tylko nadawanie, bez odbioru\n");
ExitProcess(1);
}
//
// Funkcja: ValidateArgs
//
// Opis:
// Analiza argumentów wiersza poleceń i ustalenie wartości
// niektórych znaczników…
... zobacz całą notatkę
Komentarze użytkowników (0)