Programowanie sieciowe



Podobne dokumenty
Literatura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998

Programowanie sieciowe

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

Komunikacja sieciowa - interfejs gniazd

Gniazda. S. Samolej: Gniazda 1

Gniazda BSD. Procesy w środowisku sieciowym. Gniazda podstawowe funkcje dla serwera. Gniazda podstawowe funkcje dla klienta

Programowanie współbieżne i rozproszone

Programowanie aplikacji równoległych i rozproszonych. Wykład 4

Gniazda - Wstęp. Oprogramowanie systemów równoległych i rozproszonych. Sposób komunikacji. Domena adresowa. olas@icis.pcz.pl

Podstawowe typy serwerów

Oprogramowanie komunikacyjne dla Internetu rzeczy Laboratorium nr 4 komunikacja unicastowa IPv6

Programowanie przy użyciu gniazdek

Programowanie Sieciowe 1

2. Interfejs gniazd Gniazdo

Klient-Serwer Komunikacja przy pomocy gniazd

Internet Control Message Protocol Aplikacja ping

Iteracyjny serwer TCP i aplikacja UDP

Schemat dla UDP. = możliwe zablokowanie aplikacji KLIENT SERWER. s=socket(...) bind(s,...) recvfrom(s,...) sendto(s,...) recvfrom(s,...

Komputery i Systemy Równoległe Jędrzej Ułasiewicz 1

1. Model klient-serwer

Aplikacja Sieciowa. Najpierw tworzymy nowy projekt, tym razem pracować będziemy w konsoli, a zatem: File->New- >Project

Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła

Tworzenie aplikacji rozproszonej w Sun RPC

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013

iseries Programowanie z użyciem gniazd

Projektowanie oprogramowania systemów KOMUNIKACJA SIECIOWA I SYSTEMY RPC

Gniazda BSD. komunikacja bezpołączeniowa

1.1 Przykład znajdowanie liczb pierwszych leżących w zadanym zakresie, tryb bezpołączeniowy

Architektura typu klient serwer: uproszczony klient POP3

Zadanie 2: transakcyjny protokół SKJ (2015)

Tryb bezpołączeniowy (datagramowy)

Serwer współbieżny połączeniowy

Instytut Teleinformatyki

Gniazda BSD implementacja w C#

TCP - receive buffer (queue), send buffer (queue)

Programowanie Programowanie z użyciem gniazd

Gniazda UDP. Bartłomiej Świercz. Łódź, 3 kwietnia Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda UDP

Model OSI/ISO. Komputer B. Warstwy w modelu OSI aplikacji. aplikacji. prezentacji Komputer A. prezentacji. sesji. sesji. komunikacja wirtualna

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Krótkie wprowadzenie do korzystania z OpenSSL

Gniazda surowe. Bartłomiej Świercz. Łódź,9maja2006. Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda surowe

Sieci komputerowe. Wykład 7: Transport: protokół TCP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

Przykład aplikacji UDP

Programowanie Programowanie z użyciem gniazd

Interfejs programowy Windows Sockets 2. Aplikacja klient-serwer TCP Echo

Programowanie sieciowe

Wybrane działy Informatyki Stosowanej

Protokół DNS. Aplikacja dnsquery

Programowanie rozproszone w języku Java

Programowanie Sieciowe 1

Zwielokrotnianie wejścia wyjścia

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

Protokoły sieciowe - TCP/IP

IBM i Wersja 7.2. Programowanie Programowanie z użyciem gniazd

PROTOKOŁY WARSTWY TRANSPORTOWEJ

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

Oprogramowanie systemów równoległych i rozproszonych. Wykład 6

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

Systemy rozproszone. Krzysztof Banaś Obliczenia równoległe 1

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

Aplikacja Sieciowa wątki po stronie klienta

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

Protokół ARP. dr Zbigniew Lipiński. Instytut Matematyki i Informatyki ul. Oleska Opole zlipinski@math.uni.opole.pl

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne

Zdalna obsługa transcievera. H A M R A D I O D E L U X E R e m o t e S e r v e r C o n f i g u r a t i o n

Komunikacja z użyciem gniazd aplikacje klient-serwer

socket(int domain, int type, int protocol)

Laboratorium - Przechwytywanie i badanie datagramów DNS w programie Wireshark

Podstawowe protokoły transportowe stosowane w sieciach IP cz.1

Networking. Zaawansowane technologie Javy 2019

Sieci Komputerowe. Wykład 1: TCP/IP i adresowanie w sieci Internet

Sieci Komputerowe Modele warstwowe sieci

Programowanie współbieżne i rozproszone

Stos TCP/IP. Warstwa aplikacji cz.2

TRX API opis funkcji interfejsu

Adresowanie grupowe. Bartłomiej Świercz. Katedra Mikroelektroniki i Technik Informatycznych. Łódź, 25 kwietnia 2006

Warstwa transportowa. Warstwa transportowa. Enkapsulacja. Zapewnienie niezawodnego przesyłania danych /wg ISO/ Transmisja bezpołączeniowa

76.Struktura oprogramowania rozproszonego.

Gniazda BSD UNIWERSYTET GDAŃSKI WYDZIAŁ MATEMATYKI I FIZYKI. Jacek Nowicki

Linux Kernel III. Character devices

Sieci komputerowe. Wykład 5: Warstwa transportowa: TCP i UDP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Programowanie sieciowe

Programowanie Proceduralne

Programowanie z użyciem RPC

KOMUNIKACJA MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

URL. Budowa URL (ang. Uniform Resource Locator): working#downloading

Monitorowanie Sieci nonblocking content packet filtering

Platformy Programistyczne Zagadnienia sieciowe i wątki

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ mlew@ippt.gov.pl ]

Sieci komputerowe. Wykład dla studentów Informatyki Stosowanej i Fizyki Komputerowej UJ 2007/2008. Michał Cieśla

Sun RPC/XDR. Dariusz Wawrzyniak 1

Struktury. Przykład W8_1

Funkcje zawarte w bibliotece < io.h >

Transkrypt:

Programowanie sieciowe email: dawid@us.edu.pl Programowanie warstwy transportu. - Berkeley sockets. - koncepcja gniazda - bibliteka sockets (connect(),socket(),bind(),listen(),accept(),read(),write() ) - select(); - Winsock. - operacje asynchroniczne - operacje nakładane - NETBIOS - Język C/C++. - Język Java Komunikacja między procesami. - Skrzynki(mailslots) - Łącza nazwane (named pipes). Labolatorium. C/C++, Assembler -> (Win32 VC++ 6.0, Linux GCC) A. Dawid Uniwersytet l ski Bibliografia M. Gabassi, B. Dupouy Przetwarzanie rozproszone w systemie UNIX W. Mielczarek Szeregowe interfejsy cyfrowe Stevens, Programowanie zastosowań sieciowych w systemie UNIX, WNT, Warszawa 1995 Matthew, Stones, LINUX: Programowanie, RM, Warszawa 1999 A. Jones, J. Ohlund Programowanie Sieciowe MS Windows A. Sopala Pisanie programów internetowych Czasopisma i Internet.

Gniazdka(sockets). Warstwa oprogramowania znajdująca się między warstwą programów użytkowych a warstwą oprogramowania sieci. User programme Programy usługowe SMTP,FTP... Socket API Bibliteki gniazdek socket, winsock... Transport protocol Stos TCP/IP, IPX/SPX, UDP API - Application Program Interface Gniazdka(sockets). Gniazdko to końcowy punkt kanału komunikacji. Punkt ten jest identyfikowany przy pomocy zmiennej całkowitej dyskryptora pliku. Biblioteka gniazdek maskuje warstwę transportu sieci. Podobieństwo do dostępu do pliku. HISTORIA Gniazdka zostały zaimplementowane po raz pierwszy w systemie UNIX BSD 4.2 wraz z protokołem TCP/IP

Gniazdka(sockets). Proces użytkownika Funkcje operujące gniazdkami Protokoły komunikacji TCP/UDP/IP Sterownik IEEE 802.3 Realizacja gniazdek w BSD Gniazdka(sockets). APLIKACJA KLIENT APLIKACJA SERWER gniazdka gniazdka protokół transportu protokół sieci sterownik sieci Architektura klient-serwer dla gniazdek

Gniazdka(sockets). pisanie do gniazdka czytanie z gniazdka BUFOR NADAWCZY BUFOR ODBIORCZY SIEĆ Bufory transmisji TCP Domyślne wartości tych buforów wahają się od 4k do 16k Windows - 8192. Maksymalna wartość 64k 16bit Gniazdka(sockets). Domyślne wartości tych buforów wahają się od 4k do 16k Windows - 8192. Maksymalna wartość 64k 16bit. Parametr można zmieniać programowo setsockopt(...) Korzystanie z gniazdek 1. Dziedzina w jakiej gniazdko pracuje. UNIX (AF_UNIX) Unix TCP/IP (AF_INET) winsock, Unix IPX/SPX (AF_IPX) winsock 1. Typ protokołu. SOCK_DGRAM - datagramy, brak kontroli transmisji dziedzina AF_INET, AF_IPX

Gniazdka(sockets). SOCK_STREAM - strumienie, kontrola transmisji dziedzina AF_INET, AF_IPX SOCK_RAW - pozwala na dostęp do niższych warstw protokołów takich jak IP w dziedzinie AF_INET, lub na realizację nowych protokołów. Użycie gniazdek w trybie z kontrolą połączenia. KLIENT socket() connect() SERWER socket() bind() listen() -operacje blokujące accept() write() read() read() close() closesocket() write() close() closesocket()

Użycie gniazdek w trybie z kontrolą połączenia. KLIENT connect()- blokuje wykonywanie programu dopóki serwer nie wykona accept(). write() - dopóki bufor nadawczy jest pełny; read() - dopóki co najmniej jeden bajt danych nie zostanie odebrany z serwera. SERWER accept()- blokuje wykonywanie programu dopóki klient nie wykona connect(). read() - dopóki co najmniej jeden bajt danych nie zostanie odebrany od klienta. write() - dopóki bufor nadawczy jest pełny; Biblioteki funkcji. WIN32 #include <winsock.h> Win95 #include <winsock2.h> Win98,Me,NT,2000,XP UNIX (Linux) #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h>

Adresowanie. STRUKTURA ADRESU gniazdka <sys/socket.h> struct sockaddr { u_short sa_family; char sa_data[14]; Adresowanie w dziedzinie AF_INET <netinet/in.h> struct in_addr { u_long s_addr; struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; Adresowanie. Adresowanie w dziedzinie AF_INET <winsock.h> UNIA struct in_addr { union { struct{ unsigned char S_un_b; s_b1, s_b2, s_b3, s_b4; struct { unsigned short S_un_w; s_w1, s_w2; ; S_un; unsigned long S_addr;

Adresowanie. Adresowanie w dziedzinie AF_IPX <wsipx.h> struct sockaddr_ipx { u_short sa_family; u_char sa_netnum[4]; u_char sa_nodenum[6]; unsigned short sa_socket; Adresowanie w dziedzinie AF_UNIX <sys/un.h> struct sockaddr { u_short sun_family; char sun_path[108]; Funkcje obsługi gniazdka. Tworzenie gniazdka #define SOCKET int SOCKET socket( int af, //AF_INET, AF_UNIX, AF_IPX int type, //SOCK_STREAM, SOCK_DGRAM int protocol ); Funkcja zwraca dyskryptor gniazdka wykorzystywany przez inne funkcje. SOCKET s_tcp, s_spx; s_tcp = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP); s_spx = socket(af_ipx, SOCK_STREAM, NSPROTO_SPX); s_tcp=invalid_socket; //error

Funkcje obsługi gniazdka. Przypisywanie adresu int bind( int sock, //dyskryptor gniazdka struct sockaddr *localaddr, //adres lokalny gniazdka int addrlen //długość adresu ); Funkcja przypisuje lokalny adres do gniazdka. struct sockaddr_in server; memset(&server,0,sizeof(server)); //? server.sin_family=af_inet; server.sin_addr.s_addr=inaddr_any; server.sin_port=htons(port); INADDR_ANY - upraszcza programowanie,adres lokalny dobierany jest automatycznie na podstawie ustawień danego komputera Funkcje obsługi gniazdka. Przypisywanie adresu u_short=htons(hostshort); host to network short; err=bind(sock,(struct sockaddr*) &server,sizeof(server); err=0 //no error adresy lokalne przypisywane są tylko w przypadku TCP serwera i przy odbiorze danych w UDP. W gniazdkach TCP można podać za port wartość 0 1024-5000 Połączenie klienta z serwerem int connect( int sock, //dyskryptor gniazdka struct sockaddr *servaddr, //adres serwera int addrlen );

Funkcje obsługi gniazdka. Połączenie klienta z serwerem connect char Mhost[]= 127.0.0.1 ; u_long l_adres; l_adres=inet_addr(mhost); memset(&server,0,sizeof(server)); server.sin_family=af_inet; server.sin_port=htons(port); memcpy ( (char *)&server.sin_addr, (char *)&l_adres, sizeof(u_long)); err=connect(sock,(struct sockaddr*) &server,sizeof(server)); err=0 //no error err=socket_error //winsock Funkcje obsługi gniazdka. Wprowadzenie serwera w stan nasłuchu listen int listen( int sock, //dyskryptor gniazdka int cmax //maksymalna liczba oczekujących połączeń ); err=listen(sock,5); err=0 //no error Funkcja powoduje, że serwer staje się gotowy na żądania klientów.

Funkcje obsługi gniazdka. Nawiązywanie połączenia przez serwer int accept( int sock, //dyskryptor gniazdka struct sockaddr *addrdistant, //odległy kompu. int *addrlen; ); nsock=accept(sock,(struct sockaddr*)&addrc,&addrc_len); ERROR INVALID_SOCKET = -1 Dwa ostatnie parametry zawierają adres klienta od którego odebrano połaczenie; Funkcja tworzy nowe gniazdko do komunikacji z klientem. Serwer współbieżny. Standaryzacja formatu liczb całkowitych. Numer portu i adres internetowy są liczbami całkowitymi Wymagane jest aby zarówno klient jak i serwer stosowały tę samą konwencję kolejności bajtów w reprezentacji liczb. Do uniezależnienia się od formatów stosowanych przez lokalne systemy służą funkcje do konwersji liczb całkowitych i tzw długich całkowitych do formatu sieciowego. u_long htonl(hostlong); u_long hostlong; ushort htons(hostshort); u_long ntohl(netlong); u_long netlong; u_short ntohs(netshort); u_short netshort;

Operacje na danych. Funkcje operujące na pamięci. memset(void *dst,u_char fill, size_t size); memcpy(void *dst, void *src, size_t size); memcmp(const void *dst, const void *src, size_t size); Konwersja formatów adresów. char *address; u_long inet_addr(address); struct in_addr inaddress; char *inet_ntoa(inaddress); Ustalanie adresu sieciowego. Znając nazwę komputera jego adres sieciowy możemy ustalić przez funkcję gethostbyname(); Ustala ona adres na podstawie wpisu w serwerze nazw. char *hostname; hostname=text( uranos.cto.us.edu.pl ); Struct hostent *gethostbyname(hostname); Funkcja zwraca wskaźnik do struktury hostent; struct hostent{ char *h_name; //Nazwa kompytera char **h_aliases; // lista pseudonimów int h_addrtype; // dziedzina (AF_INET) int h_lenght; // długość adresu char **h_addr_list; //lista adres. Inet. komputera ;

Przykład. #include header.h void main(int argc, char *argv[]) { struct hostent *hostp; if((hostp=gethostbyname(agv[1])==null){ printf( \nnie znaleziono komputera: %s,argv[1]); else{ printf( \nkomputer: %s (IP: %s),hostp->h_name, inet_ntoa(*hostp->h_addr_list[0])); Ustalanie adresu sieciowego. Znając adres komputera jego nazwę sieciową możemy ustalić przez funkcję gethostbyaddr(); struct HOSTENT FAR * gethostbyaddr ( const char FAR * addr, int len, int type ); addr - adres w notacji sieciowej. Len - rozmiar adresu type - dziedzina Numer portu danej usługi. struct servent FAR * getservbyname ( const char FAR * name, const char FAR * proto );

Struktura. struct servent { char FAR * s_name; //nazwa usługi char FAR * FAR * s_aliases; //lista pseudonimów short s_port; //numer portu char FAR * s_proto; //używany protokół ; Przykład nazwa serwisu. #include header.h void main(int argc, char *argv[]) { struct servent *servp; if((servp=getservbyname(agv[1], tcp ))==NULL && (servp=getservbyname(agv[1], udp ))==NULL){ printf( \nusługi %s nie znaleziono,argv[1]); else{ printf( \nusluga: %s port: %d proto: %s, servp->s_name,ntohs(servp->s_port), servp->s_proto);

Adres przypisany gniazdku. int getsockname ( SOCKET s, struct sockaddr FAR* name, int FAR* namelen ); Gniazdko, wskaźnik do adresu, długość adresu. Na podstawie gniazdka funkcja potrafi określić przypisany adres. Funkcja działa jedynie na gniazdka gdzie występuje bind() lub connect(). int getpeername ( SOCKET s, struct sockaddr FAR* name, int FAR* namelen ); Funkcja zwraca nazwę klienta podłączonego do gniazdka s. Zamykanie połączenia. closesocket(socket s),close(int sock) Brutalne zakończenie. int shutdown(int sock, int control) Zamknięcie kontrolowane polączenia. 0-uniemożliwienie odbierania danych przez gniazdko 1-uniemożliwienie wysyłania danych przez gniazdko 2-uniemożliwienie odbierania i wysyłania danych przez gniazdko

Nadawanie numerów portom. Porty zarezerwowane przez system 1-1023 Konfiguracja gniazdek. setsockopt( int sock; //deskryptor gniazdka int level; //SOL_SOCKET int option; //parametr gniazdka char *p_arg; //wskaźnik do argumentu int lg; //długość argumentu ) getsockopt( int sock; //deskryptor gniazdka int level; //SOL_SOCKET int option; //parametr gniazdka char *p_arg; //wskaźnik do zwracanych danych int *lg; //długość zwracanych danych ) Parametry konfiguracyjne gniazdek. TCP_NODELAY - wstrzymanie porządkowania danych w buforach TCP(level = IPPROTO_TCP) level = SOL_SOCKET SO_RECVBUF - określenie wielkości bufora odbiorczego SO_SNDBUF - określenie wielkości bufora nadawczego SO_KEEPALIVE - regularna transmisja komunikatów kontrolnych z kontrolą połączenia. Jeśli adresat nie odpowiada to połączenie jest uważane za przerwane. SO_RECVTIMEO - ograniczony czas na odbiór. SO_SNDTIMEO - ograniczony czas na wysyłanie.

Parametry konfiguracyjne gniazdek. Ex. Ograniczenie czasowe na odbiór danych. int inline SetSockTimeOut(SOCKET sock,dword time) { int err; char test[256]; DWORD optval; optval=time*1000; err = setsockopt(sock,sol_socket,so_rcvtimeo,(const char *)&optval,sizeof(optval)); if(err==socket_error){ return -1; return 0; Parametry konfiguracyjne gniazdek. Ex Konstrukcja. SetSockTimeOut(sock,180); nread=recv(sock,buf,nbytes,null); if(nread==socket_error) { err=wsagetlasterror(); if(err==wsaetimedout) { //Send timeout return -2; return -1;

SELECT(). int select ( int nfds, fd_set FAR * readfds, fd_set FAR * writefds, fd_set FAR * exceptfds, const struct timeval FAR * timeout ); nfds [in] Parametr ignorowany dodany ze wzgl du na zgodno z Berkeley sockets. readfds [in/out] wska nik do zbioru gniazd sprawdzanych pod k tem mo liwo ci odczytu. writefds [in/out] wska nik do zbioru gniazd sprawdzanych pod k tem mo liwo ci zapisu. exceptfds [in/out] wska nik do zbioru gniazd sprawdzanych pod k tem bł dów. timeout [in] Maksymalny czas oczekiwania select,null operacja blokuj ca. SELECT(). Ex Kontrola czy w gniazdku TCP znajdują się dane gotowe do czytania. main(){ int sock; int nsock; int rtnr; struct sockaddr_in server; fd_set readf; fd_set writef; struct timeval to; while(1){ FD_ZERO(&readf); FD_ZERO(&writef); FD_SET(sock,&readf); FD_SET(sock,&writef); to.tv_sec=10; rtrn=select(sock,&readf,&writef,0,&to);

SELECT(). if(rtrn==0){ printf( TIMEOUT ); continue; if( FD_ISSET(sock,&readf) FD_ISSET(sock,&writef)) { nsock=accept(sock,(struct sockaddr *) 0, (int *)0); server(nsock); closesocket(nsock); else{ printf( To nie dyskryptor gniazdka ); //while(1) //main Operacje nie blokujące. u_long non_block=1; int h_error; err = ioctlsocket(sockdata, FIONBIO, &non_block); do{ nsockdata=accept(sockdata,(struct sockaddr*) &addrc, &addrc_len); //Tutaj serwer w chwilach wolnych może przetwarzać h_error=wsagetlasterror(); while(h_error==wsaewouldblock);

Gniazdka w języku Java. Klasa Socket. KONSTRUKTORY Socket() Socket(SockImpl impl) ------------------Gniazda klienckie---------------- Socket(InetAddress address, int port) Socket(InetAddress address, int port, InetAddress localaddr,int localport) Socket(String host,int port); Socket(String host, int port, InetAddress localaddr,int localport) ----------Deprecated------------------------------- Socket(InetAddress host, int port, boolean stream) Socket(String host, int port, boolean stream) Klasa Socket. METODY void close(); InetAddress getinetaddress() InetAddress getlocaladdress() int getport() int getlocalport(); InputStream getinputstream() OutputStream getoutputstream() int getreceivebuffersize() int getsendbuffersize() int getsolinger() int getsotimeout() boolean gettcpnodelay()

Klasa Socket. METODY void setreceivebuffersize(int size) void setsendbuffersize(int size) void setsolinger(boolean on, int linger) void setsotimeout(int timeout) void settcpnodelay(boolean on) static void setsocketimplfactory(socketimplfactory fac) Klasa ServerSocket. KONSTRUKTORY ServerSocket(int port); ServerSocket(int port,int backlog); ServerSocket(int port,int backlog,inetaddress bindaddr); KONSTRUKTORY Socket accept() void close() InetAdress getinetaddress() int getlocalport() int getsotimeout() void setsotimeout(int timeout) protected void implaccept(socket s) static void setsocketfactory(socketimplfactory fac)

NetBIOS (Nework Basic Input/Output System) IBM 1983 (Sytek Corporation) 1985 - interfejs NetBEUI (NetBIOS Extended User Interface) NUMERY LANA (LAN Adapter numbers) Numer LANA to niepowtarzalne połączenie numeru karty sieciowej oraz protokołu transportowego. LANA 0. TCP/IP - karta sieciowa 1 1. NetBEUI - karta sieciowa 1 2. TCP/IP - karta sieciowa 2 3. NetBEUI - karta sieciowa 2 Przedział 0-9 NetBIOS (Nework Basic Input/Output System) KOMUNIKACJA Wystarczy jeden wspólny protokół aby nastąpiła komunikacja między stacjami. NAZWY NETBIOSOWE Proces rejestruje nazwę dla każdego numeru LANA z którym chce się komunikować. Nazwa ta ma długość maksymalnie 16 znaków plus 16 znaków do celów specjalnych. Maksymalna liczba nazw jakie można dodać do każdego numeru lana wynosi 254 (0 i 255 są zarezerwowane dla systemu). Komputery w sieci zgłaszają swoje nazwy jeżeli nie ma zastrzeżeń to nazwa jest akceptowana. Serwer WINS

NetBIOS (Nework Basic Input/Output System) SZESNASTY ZNAK 00 - Netbiosowa nazwa komputera. 03 - nazwa usługi komunikacyjnej. 1B - nazwa głównej przeglądarki domeny 06 - usługa serwera RAS 1F - usługa NetDDE(Network Dynamic Data Exchange) 20 - usługa umożliwiająca współużytkowanie plików. 21 - klient RAS BE - Network Monitor Agent BF - Narzędzie Network Monitor NetBIOS (Nework Basic Input/Output System) Właściwości NetBIOS-u 1. Usługi połączeniowe 2. Usługi bezpołączeniowe (datagramy).

NetBIOS (Nework Basic Input/Output System) Podstawy programowania NetBIOS-u Zestaw funkcji API UCHAR Netbios(PNCB pncb); typedef struct _NCB{ UCHAR ncb_command; //Polecenie NETBIOS z ^ ASYNCH (0x80) - asynchro UCHAR ncb_retcode; //zwracany kod przez operacj UCHAR ncb_lsn; //identyfikacja numeru sesji lokalnej UCHAR ncb_num; //okre lenie numeru nazwy sieci lokalnej PUCHAR ncb_buffer; //wskazanie bufora danych WORD ncb_length; //długo bufora w bajtach UCHAR ncb_callname[ncbnamsz]; //okre lenie nazwy odległej aplikacji UCHAR ncb_name[ncbnamsz]; //okre lenie nazwy pod któr wyst. Aplikac. UCHAR ncb_rto; //limit oczekiwania na odbiór. [500 ms] UCHAR ncb_sto; //limit oczekiwania na nadawanie [500 ms] void (*ncb_post) (struct _NCB *); adres procedury nadawczej. UCHAR ncb_lana_num; //okre lenie numeru LANA UCHAR ncb_cmd_cplt; //okre lenie kodu zwracanego dla operacji UCHAR ncb_reserve[10]; //zarezerwowane HANDLE ncb_event; //uchwyt obiektu zdarzenia Windows. *PNCB, NCB; NetBIOS (Nework Basic Input/Output System) Podstawy programowania NetBIOS-u Funkcja zwrotna VOID CALLBACK PostRoutine(PNCB pncb); Transmisja synchroniczna a transmisja asynchroniczna Polecenie (OR) ASYNCH Warto zwracana NRC_GOODRET (0x00); ale ncb_cm_cplt ma warto NRC_PENDING.