Скачать презентацию Програмиране за NET Framework http www nakov com dotnet Скачать презентацию Програмиране за NET Framework http www nakov com dotnet

92ab45518f8f115b1788e28fe3c87c6f.ppt

  • Количество слайдов: 73

Програмиране за. NET Framework http: //www. nakov. com/dotnet/ Мрежово и Интернет програмиране Ивайло Христов Програмиране за. NET Framework http: //www. nakov. com/dotnet/ Мрежово и Интернет програмиране Ивайло Христов софтуерен разработчик

Необходими знания u u Базови познания за. NET Framework Базови познания за езика C# Необходими знания u u Базови познания за. NET Framework Базови познания за езика C# Базови познания по компютърни мрежи, TCP/IP, протоколи и услуги Познания по многонишково програмиране и синхронизация

Съдържание u u 7 -слойният OSI модел Основни мрежови понятия v v v u Съдържание u u 7 -слойният OSI модел Основни мрежови понятия v v v u IP адрес, DNS, порт, мрежов интерфейс TCP, UDP, сокет връзки Основни мрежови услуги Класове за мрежово програмиране v Комуникация по TCP v v v Tcp. Client Tcp. Listener Обслужване на много клиенти едновременно

Съдържание (2) v v u Достъп до Интернет ресурси v u Web. Client, Http. Съдържание (2) v v u Достъп до Интернет ресурси v u Web. Client, Http. Web. Request, Http. Web. Response Протоколи за работа с e-mail v u Класовете Socket, Ip. Address, Dns, IPEnd. Point Комуникация по UDP – Udp. Client Изпращане и получаване на e-mail Класове за изпращане на e-mail v Прикрепени файлове (attachments)

7 -слоен OSI модел u u Осигурява физическото пренасяне на на информацията Може да 7 -слоен OSI модел u u Осигурява физическото пренасяне на на информацията Може да се реализира с: v v оптични кабели радиовълни лазери и др. Physical ( физическо ниво )

7 -слоен OSI модел u Осигурява директното пренасяне на информация между две мрежови комуникационни 7 -слоен OSI модел u Осигурява директното пренасяне на информация между две мрежови комуникационни устройства v u u u мрежови адаптери, модеми, . . . Управлява физическото ниво Корекция на грешките, възникнали във физическото ниво Протоколи: Ethernet, PPP, . . . Data Link ( свързващо ниво ) Physical ( физическо ниво )

7 -слоен OSI модел u u Осигурява пренасяне на единици информация (пакети) Въвежда уникални 7 -слоен OSI модел u u Осигурява пренасяне на единици информация (пакети) Въвежда уникални адреси в мрежата Реализира маршрутизация (routing) Протоколи: IP, IPv 6, IPX, X. 25, … Network ( мрежово ниво ) Data Link ( свързващо ниво ) Physical ( физическо ниво )

7 -слоен OSI модел u Предоставя комуникационни канали v u Осигурява прозрачност и надеждност 7 -слоен OSI модел u Предоставя комуникационни канали v u Осигурява прозрачност и надеждност на преноса на данни между две програми Протоколи: TCP, UDP, . . . Transport ( транспортно ниво ) Network ( мрежово ниво ) Data Link ( свързващо ниво ) Physical ( физическо ниво )

7 -слоен OSI модел u u Позволява две приложения да създават, използват и затварят 7 -слоен OSI модел u u Позволява две приложения да създават, използват и затварят връзка помежду си (сесия) Протоколи: TLS, RPC, Net. BIOS, . . . Session ( сесийно ниво ) Transport ( транспортно ниво ) Network ( мрежово ниво ) Data Link ( свързващо ниво ) Physical ( физическо ниво )

7 -слоен OSI модел u u Осигурява общ, разбираем за всички, формат за представяне 7 -слоен OSI модел u u Осигурява общ, разбираем за всички, формат за представяне на данните Протоколи: XML, SOAP, ASN. 1, MIME, . . . Presentation ( представително ниво ) Session ( сесийно ниво ) Transport ( транспортно ниво ) Network ( мрежово ниво ) Data Link ( свързващо ниво ) Physical ( физическо ниво )

7 -слоен OSI модел u u Дефинира протоколи за различните услуги Протоколи: HTTP, SMTP, 7 -слоен OSI модел u u Дефинира протоколи за различните услуги Протоколи: HTTP, SMTP, POP 3, FTP, DNS, . . . Application ( приложно ниво ) Presentation ( представително ниво ) Session ( сесийно ниво ) Transport ( транспортно ниво ) Network ( мрежово ниво ) Data Link ( свързващо ниво ) Physical ( физическо ниво )

Основни понятия u IP адрес v v v Уникален 32 -битов (64 -битов) номер Основни понятия u IP адрес v v v Уникален 32 -битов (64 -битов) номер на компютър Всеки компютър в Интернет и локална TCP/IP мрежа си има IP адрес Записва се като 4 последователни 8 битови числа разделени с точки Някои компютри могат да имат по няколко IP адреса Примери: v v 192. 168. 0. 1 212. 50. 1. 217

Основни понятия u DNS (Domain Name Service) v v Услуга, която преобразува имена на Основни понятия u DNS (Domain Name Service) v v Услуга, която преобразува имена на компютри в IP адреси и обратното Пример: На името www. google. com съответстват IP адресите: v v v 216. 239. 59. 104 216. 239. 59. 99 Пример: На IP адрес 194. 12. 244. 90 съответстват имената: v v zadnik. org www. zemlemoria. org

Основни понятия u Порт v v Уникален идентификатор на TCP или UDP връзка (канал Основни понятия u Порт v v Уникален идентификатор на TCP или UDP връзка (канал за данни) в рамките на IP адрес Число между 0 и 65535 Портовете от 0 до 1024 са заделени за специални (системни) приложения Пример: Internet Explorer IP: 10. 0. 52. 111 Source Port: 1033 Internet Explorer IP: 10. 0. 52. 111 Source Port: 1034 TCP TCP Web Server IP: 216. 239. 59. 99 Port: 80 (HTTP)

Основни понятия u Мрежов интерфейс v Възможно е една машина да е свързана към Основни понятия u Мрежов интерфейс v Възможно е една машина да е свързана към няколко мрежи v v v локалната мрежа в сградата мрежата на доставчика на Интернет Свързването към мрежа става посредством мрежов интерфейс v v Ethernet мрежов адаптер модем VPN връзка ISDN

Основни понятия u Мрежов интерфейс v v u Мрежовият интерфейс има IP адрес Една Основни понятия u Мрежов интерфейс v v u Мрежовият интерфейс има IP адрес Една машина може да има няколко мрежови интерфейса с няколко различни IP адреса Loopback интерфейс v v Представлява служебен интерфейс за обратна връзка към локалната машина Има адрес 127. 0. 0. 1 и име localhost

Протоколът TCP u u TCP осигурява надежден двупосочен комуникационен канал (сокет) Гарантира, че изпратените Протоколът TCP u u TCP осигурява надежден двупосочен комуникационен канал (сокет) Гарантира, че изпратените данни ще пристигнат без изменения и в същия ред v u u Ако не е възможно да се изпратят данните, ще възникне грешка Използва се в приложения, в които редът на пристигане на данните и надеждността са важни Комуникационният канал съществува докато някой от участниците в него не го прекъсне

Протоколът UDP u u Позволява изпращане и приемане на малки независими един от друг Протоколът UDP u u Позволява изпращане и приемане на малки независими един от друг пакети с данни, наречени "datagram пакети" UDP не гарантира реда на пристигане на datagram пакетите, нито че изобщо ще пристигнат По-бърз от TCP, защото не създава комуникационен канал Използва се в случаи, в които скоростта има по-голямо значение от надеждността v v v при някои игри приложения за разговори (chat) при видео и аудио разпространяването

Сокет връзки u При TCP протокола всяка TCP връзка (сокет връзка, socket connection) се Сокет връзки u При TCP протокола всяка TCP връзка (сокет връзка, socket connection) се идентифицира с 4 елемента: v v u Пример: v u Source_IP – IP адрес на клиента Source_Port – порт на клиента Dest_IP – IP адрес на сървъра Dest_Port – IP адрес на клиента (192. 168. 0. 2: 2733 212. 50. 1. 217: 80) При UDP протокола всеки UDP пакет се идентифицира със същите 4 елемента – (IP: port)-изпращач и (IP: port)-получател

Основни мрежови услуги u Услугите са сървърни приложения, които предоставят функционалност по стандартизиран протокол Основни мрежови услуги u Услугите са сървърни приложения, които предоставят функционалност по стандартизиран протокол v v В Интернет работят много стандартни услуги Стандартните услуги си имат стандартен порт Услуга Порт HTTP SMTP POP 3 FTP DNS SSH 80 25 110 21 53 22 Описание Достъп до Web-ресурси Изпращане на e-mail Извличане на e-mail Достъп до отдалечени файлове Извличане на IP по име на сървър Сигурен достъп до отдалечен терминал

Как две отдалечени машини си “говорят” Стартираме приложението сървър на порт 80 Стартираме приложението Как две отдалечени машини си “говорят” Стартираме приложението сървър на порт 80 Стартираме приложението клиент данни 80 Машина сървър данни 2096 Машина клиент

Класове за мрежово програмиране u u u Класовете за работа с TCP и UDP Класове за мрежово програмиране u u u Класовете за работа с TCP и UDP са в пространството System. Net. Sockets За мрежово програмиране се използва и пространството System. Net За отваряне на TCP комуникационен канал се използват класовете: v v u Tcp. Client – свързва се към отворен порт на отдалечена машина Tcp. Listner – отваря порт и “слуша” на него за идващи връзки За осъществяване на комуникация по UDP се използва класа Udp. Client

Класът Tcp. Client u u Използва се за осъществяване на връзка по TCP протокола Класът Tcp. Client u u Използва се за осъществяване на връзка по TCP протокола Конструкторът Tcp. Client() v v u Създава комуникационен канал (сокет) Локалният интерфейс и порт се избират от операционната система Cоnnect() v Свързва се с посочения сървър на посочения порт (блокираща операция) Tcp. Client tcp. Client = new Tcp. Client(); tcp. Client. Connect("www. devbg. org", 80); v Ако връзката не може да се осъществи се генерира Socket. Exception

Класът Tcp. Client u Конструкторът Tcp. Client(string host, int port) v v Отваря връзка Класът Tcp. Client u Конструкторът Tcp. Client(string host, int port) v v Отваря връзка по протокол TCP към посочения сървър на посочения порт Локалният интерфейс и порт се избират от операционната система Tcp. Client tcp. Client = new Tcp. Client("212. 5. 121. 5", 8080); v Ако връзката не може да се осъществи се генерира Socket. Exception

Tcp. Client – прост пример // Сканиране на локалните TCP портове от 130 до Tcp. Client – прост пример // Сканиране на локалните TCP портове от 130 до 150 for (int port = 130; port <= 150; port++) { Tcp. Client tcp. Client = new Tcp. Client(); try { tcp. Client. Connect("127. 0. 0. 1", port); Console. Write. Line("{0}: open", port); } catch (Socket. Exception) { Console. Write. Line("{0}: closed", port); } finally { tcp. Client. Close(); } }

Демонстрация #1 u Прост TCP порт скенер Демонстрация #1 u Прост TCP порт скенер

Комуникация чрез Tcp. Client u Използваме Network. Stream за четене и писане Tcp. Client Комуникация чрез Tcp. Client u Използваме Network. Stream за четене и писане Tcp. Client con = new Tcp. Client("localhost", 80); Network. Stream ns = con. Get. Stream(); u Четене (приемане) на данни – използваме Read() метода на Network. Stream byte[] data = new byte[4096]; int bytes. Read = ns. Read(data, 0, data. Length); u Изпращане на данни – използваме Write() и Flush() методите на Network. Stream ns. Write(data, 0, data. Length); ns. Flush() u Ако не извикваме Flush(), данните може да не се изпратят веднага (вътрешно буфериране)

Работа с Tcp. Client – пример Tcp. Client tcp. Client = new Tcp. Client(); Работа с Tcp. Client – пример Tcp. Client tcp. Client = new Tcp. Client(); tcp. Client. Connect("localhost", 80); Network. Stream ns = tcp. Client. Get. Stream(); using (ns) { Stream. Writer writer = new Stream. Writer(ns); writer. Write("GET http: //localhost/ HTTP/1. 0nn"); writer. Flush(); } byte[] buf = new byte[4096]; while (true) { int bytes. Read = ns. Read(buf, 0, buf. Length); if (bytes. Read == 0) break; // Server closed the connection string data = Encoding. ASCII. Get. String( buf, 0, bytes. Read); Console. Write(data); }

Демонстрация #2 u Комуникация по TCP сокет чрез Tcp. Client и Network. Stream Демонстрация #2 u Комуникация по TCP сокет чрез Tcp. Client и Network. Stream

Класът Tcp. Listener u u u Използва се за създаване на сървъри, които обслужват Класът Tcp. Listener u u u Използва се за създаване на сървъри, които обслужват клиентски TCP заявки Създаване – Tcp. Listener(int port), Tcp. Listener(IPEnd. Point) v Създава сървърски сокет, свързан с посочения интерфейс и порт Слушане – Start() v Започва да “слуша” за заявки за свързване по протокол TCP Tcp. Listener server = new Tcp. Listener(2222); server. Start();

Класът Tcp. Listener u Accept. Tcp. Client() v Приема клиентска заявка за връзка и Класът Tcp. Listener u Accept. Tcp. Client() v Приема клиентска заявка за връзка и създава по нея Tcp. Client обект Tcp. Client client = server. Accept. Tcp. Client(); v v Блокираща операция Tcp. Client обектът управлява цялата комуникация между сървъра и клиента Възможно е обслужване на няколко клиента едновременно Докато клиентите се обслужват с Tcp. Client, сървърът (Tcp. Listener) може да слуша за нови заявки

Tcp. Listener – пример IPEnd. Point server. End. Point = new IPEnd. Point(IPAddress. Any, Tcp. Listener – пример IPEnd. Point server. End. Point = new IPEnd. Point(IPAddress. Any, 2222); Tcp. Listener server = new Tcp. Listener(server. End. Point); server. Start(); while (true) { Tcp. Client client = server. Accept. Tcp. Client(); Network. Stream ns = client. Get. Stream(); using (ns) { Stream. Writer writer = new Stream. Writer(ns); writer. Write. Line("{0: dd. MM. yyyy HH: mm: ss}", Date. Time. Now); writer. Flush(); } }

Демонстрация #3 u Прост TCP сървър Демонстрация #3 u Прост TCP сървър

Обслужване на много клиенти За обслужване на много клиенти едновременно се използват нишки: u Обслужване на много клиенти За обслужване на много клиенти едновременно се използват нишки: u class Threaded. Tcp. Server { public static void Main() { Tcp. Listener server = new Tcp. Listener(2222); server. Start(); } } while(true) { Tcp. Client client = server. Accept. Tcp. Client(); Client. Thread client. Thread = new Client. Thread(client); Thread thread = new Thread( new Thread. Start(client. Thread. Serve. Client)); thread. Start(); }

Обслужване на много клиенти class Client. Thread { private Tcp. Client m. Tcp. Client; Обслужване на много клиенти class Client. Thread { private Tcp. Client m. Tcp. Client; public Client. Thread(Tcp. Client a. Tcp. Client) { m. Tcp. Client = a. Tcp. Client; } } public void Serve. Client() { using (Network. Stream ns = m. Tcp. Client. Get. Stream()) { Stream. Writer writer = new Stream. Writer(ns); writer. Write("Enter your name: "); writer. Flush(); Stream. Reader reader = new Stream. Reader(ns); string name = reader. Read. Line(); writer. Write. Line("Hello, " + name); writer. Flush(); } m. Tcp. Client. Close(); }

Демонстрация #4 u TCP сървър за обслужване на много клиенти едновременно + TCP клиент Демонстрация #4 u TCP сървър за обслужване на много клиенти едновременно + TCP клиент

Класът Socket u System. Net. Sockets. Socket v v v Реализира сокет базирана комуникация Класът Socket u System. Net. Sockets. Socket v v v Реализира сокет базирана комуникация по различни протоколи (TCP, UDP, IPv 6, ICMP, IGMP, IPX и др. ) Поддържа поточно-ориентирана и пакетно-ориентирана комуникация Реализира интерфейса "Berkeley sockets" Повечето операции могат да се изпълняват синхронно или асинхронно Дава много по-голяма гъвкавост спрямо Tcp. Listener и Tcp. Client

Класът Socket u По-важни методи на класа Socket v v v v Bind() – Класът Socket u По-важни методи на класа Socket v v v v Bind() – асоциира сокета с даден интерфейс и порт Listen() – слуша за идващи връзки Accept() – приема клиентска връзка Connect() – отваря връзка към даден хост на даден порт Send(), Receive() – изпраща / приема данни при поточно-ориентирана връзка Receive. From(), Send. To() – изпраща / приема пакети при пакетно-ориентирана връзка Begin. Connect(), End. Connect(), Begin. Send(), End. Send(), … – асинхронен вариант

Класът Ip. Address u u Класът Ip. Address представлява един IP адрес (например 192. Класът Ip. Address u u Класът Ip. Address представлява един IP адрес (например 192. 168. 0. 1) Конструктор public IPAddress(long address) u Parse(string) – получава IP адрес от низ IPAddress ip = IPAddress. Parse("10. 0. 1. 1"); u u IPAddress. Loopback – връща IP адреса на loopback интерфейса (127. 0. 0. 1) IPAddress. Any – използва се за означаване на всеки адрес (0. 0)

Класът Dns u System. Net. Dns – предоставя достъп до DNS услугата v Resolve() Класът Dns u System. Net. Dns – предоставя достъп до DNS услугата v Resolve() – предоставя IP адрес по име на хост и обратното IPHost. Entry iphe = Dns. Resolve("www. devbg. org"); Console. Write("Host: {0} --> ", iphe. Host. Name); foreach (IPAddress ip in iphe. Address. List) { Console. Write. Line("IP: {0}", ip); } // Host: www. devbg. org --> IP: 195. 69. 120. 35 IPHost. Entry loopback = Dns. Resolve("127. 0. 0. 1"); Console. Write. Line("IP: {0} --> {1}", loopback. Address. List[0], loopback. Host. Name); // IP: 127. 0. 0. 1 --> localhost

Класът IPEnd. Point u u Описва двойката Ip. Adress: port Конструиране v u IPEnd. Класът IPEnd. Point u u Описва двойката Ip. Adress: port Конструиране v u IPEnd. Point(IPAddress address, int port) Пример: IPAddress smtp. IP = IPAddress. Parse("192. 168. 1. 1"); IPEnd. Point smtp. Server. End. Point = new IPEnd. Point(smtp. IP, 25); Tcp. Client tcp. Client = new Tcp. Client(); tcp. Client. Connect(smtp. Server. End. Point);

Класът Udp. Client u UDP комуникацията е пакетно-ориентирана v v u Не се ползва Класът Udp. Client u UDP комуникацията е пакетно-ориентирана v v u Не се ползва комуникационен канал Не е нужно да имаме Listener и Client – всичко това се извършва от Udp. Client класа Конструиране v Udp. Client(int port) – създава Udp. Client обект и го свързва с указания порт на локалната машина Udp. Client udp. Client = new Udp. Client(1111); v Udp. Client() – създава Udp. Client и го свързва с някой порт (избира се от ОС) Udp. Client udp. Client = new Udp. Client();

Класът Udp. Client u Send(byte[], int) v v Изпраща пакет с данни към зададен Класът Udp. Client u Send(byte[], int) v v Изпраща пакет с данни към зададен предварително IP адрес и порт Няма гаранция, че пакетът ще пристигне Udp. Client udp. Client = new Udp. Client( "127. 0. 0. 1", 1111); string msg = "Hello"; byte[] data = Encoding. ASCII. Get. Bytes(msg); udp. Client. Send(data, data. Length);

Класът Udp. Client u byte[] Receive(ref IPEnd. Point remote. EP) v v v Получава Класът Udp. Client u byte[] Receive(ref IPEnd. Point remote. EP) v v v Получава UDP пакет с данни Блокираща операция Получава информация за изпращача чрез параметъра remote. EP IPEnd. Point server. EP = new IPEnd. Point(IPAddress. Any, 1111); Udp. Client udp. Server = new Udp. Client(server. EP); IPEnd. Point sender. EP = new IPEnd. Point(IPAddress. Any, 0); byte[] packet = udp. Server. Receive(ref sender. EP);

Демонстрация #5 u Комуникация чрез Udp. Client Демонстрация #5 u Комуникация чрез Udp. Client

Класът Web. Client u Web. Client дава достъп до ресурси, зададени чрез URI адрес Класът Web. Client u Web. Client дава достъп до ресурси, зададени чрез URI адрес v v v Например ресурси, достъпни от Web byte[] Download. Data(string uri) v Изтегля съдържанието от посочения адрес Download. File(string uri, string fname) v Изтегля съдържанието от посочения адрес и го записва в посочения файл Web. Client wc = new Web. Client(); byte[] data = wc. Download. Data("http: //www. devbg. org"); wc. Download. File("http: //www. devbg. org", @"c: tempdevbg-org. html");

Класът Web. Client u Web. Client поддържа стандартно достъп до следните типове ресурси: v Класът Web. Client u Web. Client поддържа стандартно достъп до следните типове ресурси: v v v u http: // – Web ресурси, достъпни по HTTP https: // – Web ресурси (HTTP over SSL) file: // – локални файлове Headers, Response. Headers v Съдържат колекция от заглавни части на заявка или отговор (Web. Header. Collection) Web. Header. Collection headers = wc. Response. Headers; for (int i=0; i

Извличане на отдалечен ресурс <html> <head> ……… </head> <body> </html> http: //www. devbg. org Извличане на отдалечен ресурс ……… http: //www. devbg. org HTTP заявка р ово тг TP о HT 192. 168. 0. 24 (pesho) 195. 69. 120. 35 (www. devbg. org)

Класът Http. Web. Request u u Http. Web. Request – HTTP заявка за извличане Класът Http. Web. Request u u Http. Web. Request – HTTP заявка за извличане на ресурс За да получим инстанция трябва да преобразуваме Web. Request string url = "http: //www. devbg. org/"; Http. Web. Request request = (Http. Web. Request) Web. Request. Create(url); u За достъп през proxy сървър използваме класа Web. Proxy proxy. Server = new Web. Proxy("193. 95. 112. 71: 8080"); request. Proxy = proxy. Server;

Класът Http. Web. Response u Чрез класа Http. Web. Response извличаме отговора на сървъра Класът Http. Web. Response u Чрез класа Http. Web. Response извличаме отговора на сървъра Http. Web. Response response = (Http. Web. Response) request. Get. Response(); u u Headers – връща хедърите на HTTP отговора Get. Response. Stream() – връща поток за четене на тялото на отговора на заявката Stream stream = response. Get. Response. Stream(); u u Content. Type – връща типа на върнатия отговор (текст, html, картинка, Flash, …) Status. Code – кода на HTTP отговора

Http. Web. Response – пример string url = Http. Web. Response – пример string url = "http: //www. devbg. org/"; Http. Web. Request request = (Http. Web. Request) Web. Request. Create(url); Http. Web. Response response = (Http. Web. Response) request. Get. Response(); string content. Type = response. Content. Type; Console. Write. Line("Content-Type: {0}", content. Type); Stream stream = response. Get. Response. Stream(); using (stream) { Stream. Reader reader = new Stream. Reader(stream); string response. Body = reader. Read. To. End(); Console. Write. Line(response. Body); }

Демонстрация #6 u Работа с Http. Web. Request и Http. Web. Response Демонстрация #6 u Работа с Http. Web. Request и Http. Web. Response

Протоколи за работа с e-mail u u u Simple Mail Transfer Protocol (SMTP) v Протоколи за работа с e-mail u u u Simple Mail Transfer Protocol (SMTP) v Протокол за изпращане на e-mail v Изпращане от клиент към SMTP сървър v Комуникация между SMTP сървъри Post Office Protocol, версия 3 (POP 3) v Извличане на получени e-mail съобщения Internet Message Access Protocol (IMAP) v Извличане на получени e-mail съобщения v Повече възможности от POP 3 v Поддържа папки със съобщения v Търсене на ключови думи докато e-mail съобщенията са още на сървъра

Изпращане и получаване на e-mail Използвай SMTP сървъра на твоя Интернет доставчик! SM TP Изпращане и получаване на e-mail Използвай SMTP сървъра на твоя Интернет доставчик! SM TP TP SM SMTP сървър POP 3 сървър 3 3 POP IMAP SM TP SMTP сървър Кой SMTP сървър да използвам? Изпращач на e-mail Получател на e-mail

Изпращане на e-mail с. NET u Класът System. Web. Smtp. Mail v v Предоставя. Изпращане на e-mail с. NET u Класът System. Web. Smtp. Mail v v Предоставя. NET интерфейс към Windows библиотеката CDOSYS Трябва да имате CDOSYS (cdosys. dll) за да използвате този клас v v CDOSYS е стандартна част от Windows 2000, XP и 2003 Инсталира се допълнително на Win 98/ME/NT Smtp. Server – задава SMTP сървъра Send(string from, string to, string subject, string body) – изпраща e-mail съобщение

Изпращане на e-mail с. NЕТ u Използвайте SMTP сървъра на вашия Интернет доставчик, например: Изпращане на e-mail с. NЕТ u Използвайте SMTP сървъра на вашия Интернет доставчик, например: v v u smtp. fmi. uni-sofia. bg smtp. orbitel. bg Никога не пращайте през SMTP сървъра на получателя – ще ви обявят за зъл спамер string from = "dr. ivanov@selo-ginci. org"; string to = "draganka@mangal. net"; string subject = "Cool Subject"; string body = "This is the message body"; Smtp. Mail. Smtp. Server = "smtp. My. ISP. com"; Smtp. Mail. Send(from, to, subject, body);

Формат на e-mail съобщенията u Всяко e-mail съобщение съдържа: v v Заглавна част с Формат на e-mail съобщенията u Всяко e-mail съобщение съдържа: v v Заглавна част с идентификационни полета (хедър) Част съдържаща изпращания текст (тяло)

Създаване на e-mail съобщение u System. Web. Mail. Message v v v Позволява съставяне Създаване на e-mail съобщение u System. Web. Mail. Message v v v Позволява съставяне на по-сложни e-mail съобщения Mail. Message. From – подател на съобщението Mail. Message. То – получателя на съобщението Mail. Message. Subject – задава полето “относно” Mail. Message. Body – задава съдържанието (текста), който изпращаме Mail. Message. Priority – задава приоритет (High, Normal, Low)

Създаване на e-mail съобщение v Mail. Message. Body. Format – формат на съдържанието на Създаване на e-mail съобщение v Mail. Message. Body. Format – формат на съдържанието на e-mail съобщението v v v Mail. Format. Html – съобщението е в HTML формат и повечето e-mail клиенти ще могат да го визуализират Mail. Format. Text – съобщението е чист текст (стойност по подразбиране) Mail. Message. Body. Encoding – задава / извлича кодирането на e-mail съобщението (например windows-1251, UTF-8 и др. ) Mail. Message msg = new Mail. Message(); msg. Body. Format = Mail. Format. Html; msg. Body. Encoding = Encoding. Unicode;

Изпращане на e-mail съобщение Mail. Message msg = new Mail. Message(); msg. From = Изпращане на e-mail съобщение Mail. Message msg = new Mail. Message(); msg. From = "doktor_ivanov@selo-ginci. net"; msg. To = "kaka_tonka@praseferma. novo-selo. bg"; msg. Subject = "Zdrasti ma!"; msg. Body. Format = Mail. Format. Html; msg. Body = @"Kako, dokaraha prasetata. Idvaj burzo!"; try { Smtp. Mail. Smtp. Server = "mail. interbgc. com"; Smtp. Mail. Send(msg); Console. Write. Line("Mail sent. "); } catch (System. Web. Http. Exception ex) { Console. Write. Line("Unable to send message: {0}", ex. Inner. Exception. Message); }

MIME e-mail съобщения u Multipurpose Internet Mail Extensions (MIME) v v Стандартен формат за MIME e-mail съобщения u Multipurpose Internet Mail Extensions (MIME) v v Стандартен формат за e-mail съобщения (и въобще за съобщения) Позволява изпращането на двоични данни в най-разнообразни формати Съдържа специална заглавна част описваща бинарните данни С помощта на MIME формата можем да изпращаме прикачени файлове: v v картинки, музика, графики, PDF документи изпълними файлове, zip / rar архиви, . .

MIME e-mail съобщения u В MIME заглавната част са предоставени v v Версията на MIME e-mail съобщения u В MIME заглавната част са предоставени v v Версията на MIME формата Уникален идентификатор на участъка с двоичните данни Описание на съдържанието на двоичните данни Използваната схема за кодиране

Изпращане на e-mail съобщения с прикачен файл u System. Web. Mail. Attachment v v Изпращане на e-mail съобщения с прикачен файл u System. Web. Mail. Attachment v v Позволява да добавим прикрепен файл (attachment) към e-mail съобщение Mail. Attachment(string file. Name) v v Създава нов прикрепен файл и използва кодиране UUEncode Mail. Attachment(string file. Name, Mail. Encoding enc. Type) v v Създава нов прикрепен файл и използва кодиране зададено от Mail. Encoding Поддържат се кодирания Base 64 и UUEncode

Изпращане на e-mail съобщения с прикачен файл – пример Mail. Message msg = new Изпращане на e-mail съобщения с прикачен файл – пример Mail. Message msg = new Mail. Message(); msg. From = "didi@kaval. com"; msg. To = "bobby@duduk. net"; msg. Subject = "Hi, Bobby!"; msg. Body = "Here's my picture!!"; Mail. Attachment attachment = new Mail. Attachment(@"c: imageslogo. gif"); msg. Attachments. Add(attachment); Smtp. Mail. Send(msg);

Демонстрация #7 u Изпращане на e-mail съобщение Демонстрация #7 u Изпращане на e-mail съобщение

Мрежово и Интернет програмиране Въпроси? Мрежово и Интернет програмиране Въпроси?

Упражнения 1. 2. 3. 4. Опишете 7 -те слоя от OSI мрежовия модел. Опишете Упражнения 1. 2. 3. 4. Опишете 7 -те слоя от OSI мрежовия модел. Опишете какво представляват понятията: IP адрес, DNS, порт, мрежов интерфейс, TCP, UDP и сокет връзка. Каква е разликата между TCP и UDP протоколите? Опишете основните мрежови услуги в Интернет, какви протоколи използват и кои TCP портове. Да се реализира Windows Forms приложение наподобяващо по функционалност инструмента telnet. Приложението трябва да поддържа свързване към отдалечен TCP сървър, изпращане и приемане на данни и прекъсване на установена сокет връзка. Използвайте нишки, за да направите възможно едновременното пращане и получаване на данни.

Упражнения 5. Реализирайте многопотребителски сървър за разговори (char server). Сървърът трябва да работи по Упражнения 5. Реализирайте многопотребителски сървър за разговори (char server). Сървърът трябва да работи по протокол TCP и да позволява регистриране на потребители и изпращане на съобщения между потребителите. Упътване: Реализирайте 2 команди: USER и SEND . Работете с текстови потоци. Направете всяка команда да е точно един текстов ред и сървърът да връща при всяка команда 1 текстов ред отговор (OK или ERR). За всеки потребител използвайте 2 TCP връзки (и 2 нишки, които да ги обслужват) – едната за приемане на команди, а другата за изпращане на съобщения. Съобщенията, които не са изпратени съхранявайте в обща опашка (shared queue).

Упражнения 6. 7. 8. 9. Реализирайте Windows Forms клиент за сървъра за разговори (char Упражнения 6. 7. 8. 9. Реализирайте Windows Forms клиент за сървъра за разговори (char server) от предната задача. Да се реализират UDP версии на chat сървъра и клиента за него: вместо по TCP връзки всички команди и съобщения трябва да се пращат чрез UDP пакети. Напишете Windows Forms приложение, което изпълнява на DNS заявки (преобразува от име на машина към IP адрес и обратното). Да се реализира приложение, което извлича главната страница от сайта http: //www. gbg. bg/ и отпечатва всички препратки (hyperlinks). За извличане на препратките използвайте подходящ регулярен израз.

Упражнения 10. Да се напише паяк (Web-spider) за събиране на e-mail адреси. Паякът работи Упражнения 10. Да се напише паяк (Web-spider) за събиране на e-mail адреси. Паякът работи така: Започва от даден URI адрес в Интернет и извлича съдържанието му. Чрез подходящи регулярни изрази извлича от него всички e-mail адреси и всички препратки (hyperlinks). Препратките ги канонизира (прави ги на URI адреси) и ги слага в една опашка. Докато не бъде спрян паякът обработва по същия начин поредния URL адрес от опашката. Размера на опашката да се ограничи до 50 000. За по-голямо бързодействие да се работи с 10 нишки едновременно. За извличане на даден URI адрес използвайте класа Web. Client. За комбиниране на абсолютен и релативен URI използвайте конструктора на Uri класа.

Упражнения 11. Да се състави програма, която изпраща дадено e-mail съобщение (записано в текстов Упражнения 11. Да се състави програма, която изпраща дадено e-mail съобщение (записано в текстов файл) на списък от получатели (зададени чрез текстов файл). SMTP сървърът и подателят на email съобщението трябва да се задават от конфигурационния файл на приложението. 12. Да се реализира приложение, което стои в “task bar” областта и изпраща на всеки 10 минути предварително зададен файл, на предварително зададен e-mail адрес.

Използвана литература u u Светлин Наков, Интернет програмиране с Java, Faber, 2004, ISBN 954 Използвана литература u u Светлин Наков, Интернет програмиране с Java, Faber, 2004, ISBN 954 -775 -305 -3 Richard Blum, C# Network Programming, Sybex, 2003, ISBN 0782141765 MSDN Training, Programming with the Microsoft®. NET Framework (MOC 2349 B), Module 11: Internet Access OSI model – Wikipedia, the free encyclopedia – http: //en. wikipedia. org/wiki/OSI_model