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

Download Report

Transcript Програмиране за .NET Framework http://www.nakov.com/dotnet/ Мрежово и Интернет програмиране Ивайло Христов софтуерен разработчик Необходими знания     Базови познания за .NET Framework Базови познания за езика C# Базови познания по.

Програмиране за .NET Framework
http://www.nakov.com/dotnet/
Мрежово и Интернет
програмиране
Ивайло Христов
софтуерен разработчик
Необходими знания




Базови познания за .NET Framework
Базови познания за езика C#
Базови познания по компютърни
мрежи, TCP/IP, протоколи и услуги
Познания по многонишково
програмиране и синхронизация
Съдържание


7-слойният OSI модел
Основни мрежови понятия




IP адрес, DNS, порт, мрежов интерфейс
TCP, UDP, сокет връзки
Основни мрежови услуги
Класове за мрежово програмиране

Комуникация по TCP



TcpClient
TcpListener
Обслужване на много клиенти
едновременно
Съдържание (2)



Достъп до Интернет ресурси


WebClient, HttpWebRequest,
HttpWebResponse
Протоколи за работа с e-mail


Класовете Socket, IpAddress, Dns,
IPEndPoint
Комуникация по UDP – UdpClient
Изпращане и получаване на e-mail
Класове за изпращане на e-mail

Прикрепени файлове (attachments)
7-слоен OSI модел


Осигурява физическото пренасяне на
на информацията
Може да се реализира с:




оптични кабели
радиовълни
лазери
и др.
Physical ( физическо ниво )
7-слоен OSI модел

Осигурява директното пренасяне на
информация между две мрежови
комуникационни устройства




мрежови адаптери, модеми, ...
Управлява физическото ниво
Корекция на грешките, възникнали във
физическото ниво
Протоколи: Ethernet, PPP, ...
Data Link ( свързващо ниво )
Physical ( физическо ниво )
7-слоен OSI модел




Осигурява пренасяне на единици
информация (пакети)
Въвежда уникални адреси в мрежата
Реализира маршрутизация (routing)
Протоколи: IP, IPv6, IPX, X.25, …
Network ( мрежово ниво )
Data Link ( свързващо ниво )
Physical ( физическо ниво )
7-слоен OSI модел

Предоставя комуникационни канали


Осигурява прозрачност и надеждност на
преноса на данни между две програми
Протоколи: TCP, UDP, ...
Transport ( транспортно ниво )
Network ( мрежово ниво )
Data Link ( свързващо ниво )
Physical ( физическо ниво )
7-слоен OSI модел


Позволява две приложения да създават,
използват и затварят връзка помежду си
(сесия)
Протоколи: TLS, RPC, NetBIOS, ...
Session ( сесийно ниво )
Transport ( транспортно ниво )
Network ( мрежово ниво )
Data Link ( свързващо ниво )
Physical ( физическо ниво )
7-слоен OSI модел


Осигурява общ, разбираем за всички,
формат за представяне на данните
Протоколи: XML, SOAP, ASN.1, MIME, ...
Presentation ( представително ниво )
Session ( сесийно ниво )
Transport ( транспортно ниво )
Network ( мрежово ниво )
Data Link ( свързващо ниво )
Physical ( физическо ниво )
7-слоен OSI модел


Дефинира протоколи за различните услуги
Протоколи: HTTP, SMTP, POP3, FTP, DNS, ...
Application ( приложно ниво )
Presentation ( представително ниво )
Session ( сесийно ниво )
Transport ( транспортно ниво )
Network ( мрежово ниво )
Data Link ( свързващо ниво )
Physical ( физическо ниво )
Основни понятия

IP адрес





Уникален 32-битов (64-битов) номер на
компютър
Всеки компютър в Интернет и локална
TCP/IP мрежа си има IP адрес
Записва се като 4 последователни 8битови числа разделени с точки
Някои компютри могат да имат по
няколко IP адреса
Примери:


192.168.0.1
212.50.1.217
Основни понятия

DNS (Domain Name Service)


Услуга, която преобразува имена на
компютри в IP адреси и обратното
Пример: На името www.google.com
съответстват IP адресите:



216.239.59.104
216.239.59.99
Пример: На IP адрес 194.12.244.90
съответстват имената:


zadnik.org
www.zemlemoria.org
Основни понятия

Порт




Уникален идентификатор на 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
Web Server
IP: 216.239.59.99
Port: 80 (HTTP)
Основни понятия

Мрежов интерфейс

Възможно е една машина да е
свързана към няколко мрежи



локалната мрежа в сградата
мрежата на доставчика на Интернет
Свързването към мрежа става
посредством мрежов интерфейс




Ethernet мрежов адаптер
модем
VPN връзка
ISDN
Основни понятия

Мрежов интерфейс



Мрежовият интерфейс има IP адрес
Една машина може да има няколко
мрежови интерфейса с няколко
различни IP адреса
Loopback интерфейс


Представлява служебен интерфейс за
обратна връзка към локалната машина
Има адрес 127.0.0.1 и име localhost
Протоколът TCP


TCP осигурява надежден двупосочен
комуникационен канал (сокет)
Гарантира, че изпратените данни ще
пристигнат без изменения и в същия ред



Ако не е възможно да се изпратят данните,
ще възникне грешка
Използва се в приложения, в които редът
на пристигане на данните и надеждността
са важни
Комуникационният канал съществува
докато някой от участниците в него не го
прекъсне
Протоколът UDP




Позволява изпращане и приемане на
малки независими един от друг пакети с
данни, наречени "datagram пакети"
UDP не гарантира реда на пристигане на
datagram пакетите, нито че изобщо ще
пристигнат
По-бърз от TCP, защото не създава
комуникационен канал
Използва се в случаи, в които скоростта
има по-голямо значение от надеждността



при някои игри
при приложения за разговори (chat)
при видео и аудио разпространяването
Сокет връзки

При TCP протокола всяка TCP връзка
(сокет връзка, socket connection) се
идентифицира с 4 елемента:





Пример:


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)-получател
Основни мрежови услуги

Услугите са сървърни приложения,
които предоставят функционалност по
стандартизиран протокол


В Интернет работят много стандартни услуги
Стандартните услуги си имат стандартен порт
Услуга Порт
HTTP
SMTP
POP3
FTP
DNS
SSH
80
25
110
21
53
22
Описание
Достъп до Web-ресурси
Изпращане на e-mail
Извличане на e-mail
Достъп до отдалечени файлове
Извличане на IP по име на сървър
Сигурен достъп до отдалечен терминал
Как две отдалечени машини си
“говорят”
Стартираме
приложението
сървър на порт 80
Стартираме
приложението
клиент
данни
80
Машина
сървър
данни
2096
Машина
клиент
Класове за мрежово програмиране



Класовете за работа с TCP и UDP са в
пространството System.Net.Sockets
За мрежово програмиране се използва
и пространството System.Net
За отваряне на TCP комуникационен
канал се използват класовете:



TcpClient – свързва се към отворен
порт на отдалечена машина
TcpListner – отваря порт и “слуша” на
него за идващи връзки
За осъществяване на комуникация по
UDP се използва класа UdpClient
Класът TcpClient


Използва се за осъществяване на връзка
по TCP протокола
Конструкторът TcpClient()



Създава комуникационен канал (сокет)
Локалният интерфейс и порт се избират от
операционната система
Cоnnect()

Свързва се с посочения сървър на
посочения порт (блокираща операция)
TcpClient tcpClient = new TcpClient();
tcpClient.Connect("www.devbg.org", 80);

Ако връзката не може да се осъществи се
генерира SocketException
Класът TcpClient

Конструкторът TcpClient(string
host, int port)


Отваря връзка по протокол TCP към
посочения сървър на посочения порт
Локалният интерфейс и порт се избират
от операционната система
TcpClient tcpClient =
new TcpClient("212.5.121.5", 8080);

Ако връзката не може да се осъществи
се генерира SocketException
TcpClient – прост пример
// Сканиране на локалните TCP портове от 130 до 150
for (int port = 130; port <= 150; port++)
{
TcpClient tcpClient = new TcpClient();
try
{
tcpClient.Connect("127.0.0.1", port);
Console.WriteLine("{0}: open", port);
}
catch (SocketException)
{
Console.WriteLine("{0}: closed", port);
}
finally
{
tcpClient.Close();
}
}
Демонстрация #1

Прост TCP порт скенер
Комуникация чрез TcpClient

Използваме NetworkStream за четене и писане
TcpClient con = new TcpClient("localhost", 80);
NetworkStream ns = con.GetStream();

Четене (приемане) на данни – използваме
Read() метода на NetworkStream
byte[] data = new byte[4096];
int bytesRead = ns.Read(data, 0, data.Length);

Изпращане на данни – използваме Write() и
Flush() методите на NetworkStream
ns.Write(data, 0, data.Length);
ns.Flush()

Ако не извикваме Flush(), данните може да не
се изпратят веднага (вътрешно буфериране)
Работа с TcpClient – пример
TcpClient tcpClient = new TcpClient();
tcpClient.Connect("localhost", 80);
NetworkStream ns = tcpClient.GetStream();
using (ns)
{
StreamWriter writer = new StreamWriter(ns);
writer.Write("GET http://localhost/ HTTP/1.0\n\n");
writer.Flush();
byte[] buf = new byte[4096];
while (true)
{
int bytesRead = ns.Read(buf, 0, buf.Length);
if (bytesRead == 0)
break; // Server closed the connection
string data = Encoding.ASCII.GetString(
buf, 0, bytesRead);
Console.Write(data);
}
}
Демонстрация #2

Комуникация по TCP сокет чрез
TcpClient и NetworkStream
Класът TcpListener


Използва се за създаване на сървъри,
които обслужват клиентски TCP заявки
Създаване – TcpListener(int port),
TcpListener(IPEndPoint)
Създава сървърски сокет, свързан с
посочения интерфейс и порт
Слушане – Start()
 Започва да “слуша” за заявки за
свързване по протокол TCP


TcpListener server =
new TcpListener(2222);
server.Start();
Класът TcpListener

AcceptTcpClient()

Приема клиентска заявка за връзка и
създава по нея TcpClient обект
TcpClient client = server.AcceptTcpClient();




Блокираща операция
TcpClient обектът управлява цялата
комуникация между сървъра и клиента
Възможно е обслужване на няколко
клиента едновременно
Докато клиентите се обслужват с
TcpClient, сървърът (TcpListener)
може да слуша за нови заявки
TcpListener – пример
IPEndPoint serverEndPoint =
new IPEndPoint(IPAddress.Any, 2222);
TcpListener server =
new TcpListener(serverEndPoint);
server.Start();
while (true)
{
TcpClient client = server.AcceptTcpClient();
NetworkStream ns = client.GetStream();
using (ns)
{
StreamWriter writer = new StreamWriter(ns);
writer.WriteLine("{0:dd.MM.yyyy HH:mm:ss}",
DateTime.Now);
writer.Flush();
}
}
Демонстрация #3

Прост TCP сървър
Обслужване на много клиенти
За обслужване на много клиенти
едновременно се използват нишки:

class ThreadedTcpServer
{
public static void Main()
{
TcpListener server = new TcpListener(2222);
server.Start();
while(true)
{
TcpClient client = server.AcceptTcpClient();
ClientThread clientThread = new ClientThread(client);
Thread thread = new Thread(
new ThreadStart(clientThread.ServeClient));
thread.Start();
}
}
}
Обслужване на много клиенти
class ClientThread
{
private TcpClient mTcpClient;
public ClientThread(TcpClient aTcpClient)
{ mTcpClient = aTcpClient; }
public void ServeClient()
{
using (NetworkStream ns = mTcpClient.GetStream())
{
StreamWriter writer = new StreamWriter(ns);
writer.Write("Enter your name:");
writer.Flush();
StreamReader reader = new StreamReader(ns);
string name = reader.ReadLine();
writer.WriteLine("Hello, " + name);
writer.Flush();
}
mTcpClient.Close();
}
}
Демонстрация #4

TCP сървър за обслужване на много
клиенти едновременно + TCP клиент
Класът Socket

System.Net.Sockets.Socket





Реализира сокет базирана комуникация
по различни протоколи (TCP, UDP, IP,
IPv6, ICMP, IGMP, IPX и др.)
Поддържа поточно-ориентирана и
пакетно-ориентирана комуникация
Реализира интерфейса "Berkeley
sockets"
Повечето операции могат да се
изпълняват синхронно или асинхронно
Дава много по-голяма гъвкавост спрямо
TcpListener и TcpClient
Класът Socket

По-важни методи на класа Socket







Bind() – асоциира сокета с даден интерфейс и
порт
Listen() – слуша за идващи връзки
Accept() – приема клиентска връзка
Connect() – отваря връзка към даден хост на
даден порт
Send(), Receive() – изпраща / приема данни
при поточно-ориентирана връзка
ReceiveFrom(), SendTo() – изпраща / приема
пакети при пакетно-ориентирана връзка
BeginConnect(), EndConnect(), BeginSend(),
EndSend(), … – асинхронен вариант
Класът IpAddress


Класът IpAddress представлява един IP
адрес (например 192.168.0.1)
Конструктор
public IPAddress(long address)

Parse(string) – получава IP адрес от низ
IPAddress ip = IPAddress.Parse("10.0.1.1");


IPAddress.Loopback – връща IP адреса на
loopback интерфейса (127.0.0.1)
IPAddress.Any – използва се за
означаване на всеки адрес (0.0.0.0)
Класът Dns

System.Net.Dns – предоставя
достъп до DNS услугата

Resolve() – предоставя IP адрес по име
на хост и обратното
IPHostEntry iphe = Dns.Resolve("www.devbg.org");
Console.Write("Host: {0} --> ", iphe.HostName);
foreach (IPAddress ip in iphe.AddressList)
{
Console.WriteLine("IP: {0}", ip);
}
// Host: www.devbg.org --> IP: 195.69.120.35
IPHostEntry loopback = Dns.Resolve("127.0.0.1");
Console.WriteLine("IP: {0} --> {1}",
loopback.AddressList[0], loopback.HostName);
// IP: 127.0.0.1 --> localhost
Класът IPEndPoint


Описва двойката IpAdress:port
Конструиране


IPEndPoint(IPAddress address, int
port)
Пример:
IPAddress smtpIP =
IPAddress.Parse("192.168.1.1");
IPEndPoint smtpServerEndPoint =
new IPEndPoint(smtpIP, 25);
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(smtpServerEndPoint);
Класът UdpClient

UDP комуникацията е пакетно-ориентирана



Не се ползва комуникационен канал
Не е нужно да имаме Listener и Client –
всичко това се извършва от UdpClient класа
Конструиране
 UdpClient(int port) – създава
UdpClient обект и го свързва с
указания порт на локалната машина
UdpClient udpClient = new UdpClient(1111);

UdpClient() – създава UdpClient и го
свързва с някой порт (избира се от ОС)
UdpClient udpClient = new UdpClient();
Класът UdpClient

Send(byte[], int)


Изпраща пакет с данни към зададен
предварително IP адрес и порт
Няма гаранция, че пакетът ще пристигне
UdpClient udpClient = new UdpClient(
"127.0.0.1", 1111);
string msg = "Hello";
byte[] data =
Encoding.ASCII.GetBytes(msg);
udpClient.Send(data, data.Length);
Класът UdpClient

byte[] Receive(ref IPEndPoint
remoteEP)



Получава UDP пакет с данни
Блокираща операция
Получава информация за изпращача
чрез параметъра remoteEP
IPEndPoint serverEP =
new IPEndPoint(IPAddress.Any, 1111);
UdpClient udpServer = new UdpClient(serverEP);
IPEndPoint senderEP =
new IPEndPoint(IPAddress.Any, 0);
byte[] packet = udpServer.Receive(ref senderEP);
Демонстрация #5

Комуникация чрез UdpClient
Класът WebClient

WebClient дава достъп до ресурси,
зададени чрез URI адрес



Например ресурси, достъпни от Web
byte[] DownloadData(string uri)
 Изтегля съдържанието от посочения адрес
DownloadFile(string uri, string fname)
 Изтегля съдържанието от посочения адрес
и го записва в посочения файл
WebClient wc = new WebClient();
byte[] data =
wc.DownloadData("http://www.devbg.org");
wc.DownloadFile("http://www.devbg.org",
@"c:\temp\devbg-org.html");
Класът WebClient

WebClient поддържа стандартно достъп
до следните типове ресурси:




http:// – Web ресурси, достъпни по HTTP
https:// – Web ресурси (HTTP over SSL)
file:// – локални файлове
Headers, ResponseHeaders

Съдържат колекция от заглавни части на
заявка или отговор (WebHeaderCollection)
WebHeaderCollection headers = wc.ResponseHeaders;
for (int i=0; i<headers.Count; i++)
{
string key = headers.Keys[i];
string value = headers[i];
Console.WriteLine("{0} = {1}", key, value);
}
Извличане на отдалечен ресурс
<html>
<head>
………
</head>
<body>
</body>
</html>
http://www.devbg.org
HTTP заявка
192.168.0.24
(pesho)
195.69.120.35
(www.devbg.org)
Класът HttpWebRequest


HttpWebRequest – HTTP заявка за
извличане на ресурс
За да получим инстанция трябва да
преобразуваме WebRequest
string url = "http://www.devbg.org/";
HttpWebRequest request =
(HttpWebRequest) WebRequest.Create(url);

За достъп през proxy сървър използваме
класа WebProxy
WebProxy proxyServer =
new WebProxy("193.95.112.71:8080");
request.Proxy = proxyServer;
Класът HttpWebResponse

Чрез класа HttpWebResponse извличаме
отговора на сървъра
HttpWebResponse response =
(HttpWebResponse) request.GetResponse();


Headers – връща хедърите на HTTP
отговора
GetResponseStream() – връща поток за
четене на тялото на отговора на заявката
Stream stream = response.GetResponseStream();


ContentType – връща типа на върнатия
отговор (текст, html, картинка, Flash, …)
StatusCode – кода на HTTP отговора
HttpWebResponse – пример
string url = "http://www.devbg.org/";
HttpWebRequest request =
(HttpWebRequest) WebRequest.Create(url);
HttpWebResponse response =
(HttpWebResponse) request.GetResponse();
string contentType = response.ContentType;
Console.WriteLine("Content-Type: {0}",
contentType);
Stream stream = response.GetResponseStream();
using (stream)
{
StreamReader reader = new StreamReader(stream);
string responseBody = reader.ReadToEnd();
Console.WriteLine(responseBody);
}
Демонстрация #6

Работа с HttpWebRequest и
HttpWebResponse
Протоколи за работа с e-mail



Simple Mail Transfer Protocol (SMTP)
 Протокол за изпращане на e-mail
 Изпращане от клиент към SMTP сървър
 Комуникация между SMTP сървъри
Post Office Protocol, версия 3 (POP3)
 Извличане на получени e-mail съобщения
Internet Message Access Protocol (IMAP)
 Извличане на получени e-mail съобщения
 Повече възможности от POP3
 Поддържа папки със съобщения
 Търсене на ключови думи докато e-mail
съобщенията са още на сървъра
Изпращане и получаване на e-mail
Използвай SMTP
сървъра на твоя
Интернет доставчик!
SMTP
сървър
POP3
сървър
SMTP
сървър
Кой SMTP сървър
да използвам?
Изпращач на e-mail
Получател на e-mail
Изпращане на e-mail с .NET

Класът System.Web.SmtpMail


Предоставя .NET интерфейс към
Windows библиотеката CDOSYS
Трябва да имате CDOSYS (cdosys.dll)
за да използвате този клас




CDOSYS е стандартна част от Windows 2000,
XP и 2003
Инсталира се допълнително на Win98/ME/NT
SmtpServer – задава SMTP сървъра
Send(string from, string to,
string subject, string body) –
изпраща e-mail съобщение
Изпращане на e-mail с .NЕТ

Използвайте SMTP сървъра на вашия
Интернет доставчик, например:



smtp.fmi.uni-sofia.bg
smtp.orbitel.bg
Никога не пращайте през SMTP сървъра на
получателя – ще ви обявят за зъл спамер
string from = "[email protected]";
string to = "[email protected]";
string subject = "Cool Subject";
string body = "This is the message body";
SmtpMail.SmtpServer = "smtp.MyISP.com";
SmtpMail.Send(from, to, subject, body);
Формат на e-mail съобщенията

Всяко e-mail
съобщение
съдържа:


Заглавна част с
идентификационни
полета (хедър)
Част съдържаща
изпращания текст
(тяло)
Създаване на e-mail съобщение

System.Web.Mail.MailMessage






Позволява съставяне на по-сложни e-mail
съобщения
MailMessage.From – подател на
съобщението
MailMessage.То – получателя на
съобщението
MailMessage.Subject – задава полето
“относно”
MailMessage.Body – задава съдържанието
(текста), който изпращаме
MailMessage.Priority – задава приоритет
(High, Normal, Low)
Създаване на e-mail съобщение

MailMessage.BodyFormat – формат на
съдържанието на e-mail съобщението



MailFormat.Html – съобщението е в HTML
формат и повечето e-mail клиенти ще могат
да го визуализират
MailFormat.Text – съобщението е чист
текст (стойност по подразбиране)
MailMessage.BodyEncoding – задава /
извлича кодирането на e-mail съобщението
(например windows-1251, UTF-8 и др.)
MailMessage msg = new MailMessage();
msg.BodyFormat = MailFormat.Html;
msg.BodyEncoding = Encoding.Unicode;
Изпращане на e-mail съобщение
MailMessage msg = new MailMessage();
msg.From = "[email protected]";
msg.To = "[email protected]";
msg.Subject = "Zdrasti ma!";
msg.BodyFormat = MailFormat.Html;
msg.Body = @"<html><body><h1>Kako, dokaraha
prasetata. Idvaj burzo!</h1></body></html>";
try
{
SmtpMail.SmtpServer = "mail.interbgc.com";
SmtpMail.Send(msg);
Console.WriteLine("Mail sent.");
}
catch (System.Web.HttpException ex)
{
Console.WriteLine("Unable to send message: {0}",
ex.InnerException.InnerException.Message);
}
MIME e-mail съобщения

Multipurpose Internet Mail Extensions
(MIME)




Стандартен формат за e-mail съобщения
(и въобще за съобщения)
Позволява изпращането на двоични
данни в най-разнообразни формати
Съдържа специална заглавна част
описваща бинарните данни
С помощта на MIME формата можем да
изпращаме прикачени файлове:


картинки, музика, графики, PDF документи
изпълними файлове, zip / rar архиви, ....
MIME e-mail съобщения

В MIME заглавната
част са
предоставени




Версията на MIME
формата
Уникален
идентификатор на
участъка с
двоичните данни
Описание на
съдържанието на
двоичните данни
Използваната схема
за кодиране
Изпращане на e-mail съобщения
с прикачен файл

System.Web.Mail.MailAttachment


Позволява да добавим прикрепен файл
(attachment) към e-mail съобщение
MailAttachment(string fileName)


Създава нов прикрепен файл и използва
кодиране UUEncode
MailAttachment(string fileName,
MailEncoding encType)


Създава нов прикрепен файл и използва
кодиране зададено от MailEncoding
Поддържат се кодирания Base64 и UUEncode
Изпращане на e-mail съобщения
с прикачен файл – пример
MailMessage msg = new MailMessage();
msg.From = "[email protected]";
msg.To = "[email protected]";
msg.Subject = "Hi, Bobby!";
msg.Body = "Here's my picture!!";
MailAttachment attachment = new
MailAttachment(@"c:\images\logo.gif");
msg.Attachments.Add(attachment);
SmtpMail.Send(msg);
Демонстрация #7

Изпращане на e-mail съобщение
Мрежово и Интернет
програмиране
Въпроси?
Упражнения
1.
2.
3.
4.
Опишете 7-те слоя от OSI мрежовия модел.
Опишете какво представляват понятията: IP
адрес, DNS, порт, мрежов интерфейс, TCP, UDP и
сокет връзка. Каква е разликата между TCP и UDP
протоколите?
Опишете основните мрежови услуги в Интернет,
какви протоколи използват и кои TCP портове.
Да се реализира Windows Forms приложение
наподобяващо по функционалност инструмента
telnet. Приложението трябва да поддържа
свързване към отдалечен TCP сървър,
изпращане и приемане на данни и прекъсване на
установена сокет връзка. Използвайте нишки, за
да направите възможно едновременното пращане
и получаване на данни.
Упражнения
5.
Реализирайте многопотребителски сървър за
разговори (char server). Сървърът трябва да
работи по протокол TCP и да позволява
регистриране на потребители и изпращане на
съобщения между потребителите. Упътване:
Реализирайте 2 команди: USER <username> и
SEND <username> <message>. Работете с
текстови потоци. Направете всяка команда да е
точно един текстов ред и сървърът да връща при
всяка команда 1 текстов ред отговор (OK или ERR).
За всеки потребител използвайте 2 TCP връзки (и
2 нишки, които да ги обслужват) – едната за
приемане на команди, а другата за изпращане на
съобщения. Съобщенията, които не са изпратени
съхранявайте в обща опашка (shared queue).
Упражнения
6.
Реализирайте Windows Forms клиент за сървъра
за разговори (char server) от предната задача.
7.
Да се реализират UDP версии на chat сървъра и
клиента за него: вместо по TCP връзки всички
команди и съобщения трябва да се пращат чрез
UDP пакети.
8.
Напишете Windows Forms приложение, което
изпълнява на DNS заявки (преобразува от име на
машина към IP адрес и обратното).
Да се реализира приложение, което извлича
главната страница от сайта http://www.gbg.bg/ и
отпечатва всички препратки (hyperlinks). За
извличане на препратките използвайте подходящ
регулярен израз.
9.
Упражнения
10. Да се напише паяк (Web-spider) за събиране на e-
mail адреси. Паякът работи така: Започва от
даден URI адрес в Интернет и извлича
съдържанието му. Чрез подходящи регулярни
изрази извлича от него всички e-mail адреси и
всички препратки (hyperlinks). Препратките ги
канонизира (прави ги на URI адреси) и ги слага в
една опашка. Докато не бъде спрян паякът
обработва по същия начин поредния URL адрес
от опашката. Размера на опашката да се ограничи
до 50 000. За по-голямо бързодействие да се
работи с 10 нишки едновременно. За извличане
на даден URI адрес използвайте класа WebClient.
За комбиниране на абсолютен и релативен URI
използвайте конструктора на Uri класа.
Упражнения
11. Да се състави програма, която изпраща дадено e-
mail съобщение (записано в текстов файл) на
списък от получатели (зададени чрез текстов
файл). SMTP сървърът и подателят на e-mail
съобщението трябва да се задават от
конфигурационния файл на приложението.
12. Да се реализира приложение, което стои в “task
bar” областта и изпраща на всеки 10 минути
предварително зададен файл, на предварително
зададен e-mail адрес.
Използвана литература




Светлин Наков, Интернет програмиране с 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 2349B), Module 11: Internet
Access
OSI model – Wikipedia, the free encyclopedia –
http://en.wikipedia.org/wiki/OSI_model