Лекция 6
Раздел 6.1
Windows Phone Темы раздела 3
Windows Phone Сигналы в Windows Phone 4 Программы Windows Phone Интерфейс сетевого программирования Wi-Fi Сотовая сеть USB
Windows Phone Классы NetworkInformation 5 using Microsoft.Phone.Net.NetworkInformation;
Windows Phone Получение информации о сети 6 if (DeviceNetworkInformation.IsWiFiEnabled) { // Wi-Fi доступен }
Windows Phone Сети и устройства 7
Windows Phone Сетевые пакеты 8
Windows Phone Сетевые адреса 9
Windows Phone Адресация в Интернете 10
Windows Phone Маршрутизация 11
Windows Phone Маршрутизация 12
Windows Phone Сетевые протоколы 13
Windows Phone Адресация устройств 14
Windows Phone Адресация подсетей 15
Windows Phone Сетевые порты 16
Windows Phone Общепринятые порты 17
Windows Phone Дейтаграммы 18
Windows Phone Сеансы подключения 19
Windows Phone UDP и TCP 20
Windows Phone Краткие итоги 21
Раздел 6.2
Windows Phone Темы раздела 23
Windows Phone Протокол UDP 24
Windows Phone Служба echo 25
Windows Phone Отправка сообщения 26 public string SendMessageUDP(string message, string hostUrl, int portNumber) { }... string resp; resp = SendMessageUDP(message, hostUrl, portNumber);
Windows Phone Класс Socket 27 using System.Net.Sockets;
Windows Phone Создание подключения 28 Socket hostSocket = null;... hostSocket = new Socket( AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Windows Phone Установка системы адресации 29 Socket hostSocket = null;... hostSocket = new Socket( AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Windows Phone Установка типа подключения 30 Socket hostSocket = null;... hostSocket = new Socket( AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Windows Phone Установка типа протокола 31 Socket hostSocket = null;... hostSocket = new Socket( AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Windows Phone Класс SocketAsyncEventArgs 32 SocketAsyncEventArgs socketEventArgs = new SocketAsyncEventArgs();
Windows Phone Задание конечной точки 33 socketEventArgs.RemoteEndPoint = new DnsEndPoint(hostUrl, portNumber, AddressFamily.InterNetwork);
Windows Phone Адрес удалённой системы 34 socketEventArgs.RemoteEndPoint = new DnsEndPoint(hostUrl, portNumber, AddressFamily.InterNetwork);
Windows Phone Определение порта 35 socketEventArgs.RemoteEndPoint = new DnsEndPoint(hostUrl, portNumber, AddressFamily.InterNetwork);
Windows Phone Определение схемы адресации 36 socketEventArgs.RemoteEndPoint = new DnsEndPoint(hostUrl, portNumber, AddressFamily.InterNetwork);
Windows Phone Кодирование сообщения 37
Windows Phone Использование класса Encoding 38 using System.Text;... byte[] messageBytes = Encoding.UTF8.GetBytes(message);
Windows Phone Асинхронные операции 39
Windows Phone Событие Completed 40 socketEventArgs.Completed += new EventHandler (delegate(object s, SocketAsyncEventArgs e) { // код в этом блоке выполняется, // когда происходит событие Completed });
Windows Phone Проверка результата 41 socketEventArgs.Completed += new EventHandler (delegate(object s, SocketAsyncEventArgs e) { if (e.SocketError == SocketError.Success) resp = ""; else resp = e.SocketError.ToString(); });
Windows Phone Проверка результата 42 socketEventArgs.Completed += new EventHandler (delegate(object s, SocketAsyncEventArgs e) { if (e.SocketError == SocketError.Success) resp = ""; else resp = e.SocketError.ToString(); });
Windows Phone Асинхронные операции и потоки 43
Windows Phone Синхронизация потоков 44 using System.Threading;... static ManualResetEvent transferDoneFlag = new ManualResetEvent(false);
Windows Phone Установка флага 45 socketEventArgs.Completed += new EventHandler (delegate(object s, SocketAsyncEventArgs e) { // запустить все ожидающие потоки transferDoneFlag.Set(); });
Windows Phone Использование флага 46 transferDoneFlag.WaitOne();
Windows Phone Использование тайм-аута 47 transferDoneFlag.WaitOne(MESSAGE_TIMEOUT_MSECS);
Windows Phone Отправка сообщения 48 transferDoneFlag.Reset(); hostSocket.SendToAsync(socketEventArgs); transferDoneFlag.WaitOne(MESSAGE_TIMEOUT_MSECS);
Windows Phone Получение сообщения 49 public string ReceiveMessageUDP(int portNumber, out string result) {... }
Windows Phone Адресация входящих сообщений 50 socketEventArgs.RemoteEndPoint = new IPEndPoint(IPAddress.Any, portNumber);
Windows Phone Декодирование сообщения 51 byte[] responseBytes = new Byte[MAX_BUFFER_SIZE]; socketEventArgs.SetBuffer(responseBytes, 0, MAX_BUFFER_SIZE); message = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred); message = message.Trim('\0');
Windows Phone Отправка и получение 52 string resp; string echo; resp = SendMessageUDP("Hello", "host.com", 7); if (resp.Length == 0) { resp = ReceiveMessageUDP(7, out echo); }
Windows Phone Краткие итоги 53
Раздел 6.3
Windows Phone Темы раздела 55
Windows Phone Протоколы TCP и HTTP 56
Windows Phone Получение веб-страницы 57 private string RequestWebPage(string url, string page, out string pageContent) {... } string resp; string page; resp = RequestWebPage (host.com", "index.html", out page);
Windows Phone Создание TCP-подключения 58 hostSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // создание подключения hostSocket.ConnectAsync(socketEventArg);
Windows Phone Запрос веб-страницы 59 response = SendMessageTCP("GET " + page + " HTTP/1.1\r\nHost: " + url + "\r\nConnection: Close\r\n\r\n");
Windows Phone Получение ответного сообщения 60 response = ReceiveMessageTCP(out fetchText);
Windows Phone Получение нескольких сообщений 61 do { response = ReceiveMessageTCP(out fetchText); if (response != "") { CloseTCP(); return response; } wholePage = wholePage + fetchText; } while (fetchText != "");
Windows Phone Закрытие подключения 62 void CloseTCP() { if (hostSocket != null) { hostSocket.Close(); hostSocket = null; }
Windows Phone Краткие итоги 63
Раздел 6.4
Windows Phone Класс WebClient 65
Windows Phone Создание WebClient 66 WebClient client; // конструктор страницы приложения public MainPage() { InitializeComponent(); client = new WebClient(); client.DownloadStringCompleted += new DownloadStringCompletedEventHandler( client_DownloadStringCompleted); }
Windows Phone Создание обработчика события 67 WebClient client; // конструктор страницы приложения public MainPage() { InitializeComponent(); client = new WebClient(); client.DownloadStringCompleted += new DownloadStringCompletedEventHandler( client_DownloadStringCompleted); }
Windows Phone Отображение результатов 68 void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { if (e.Error == null) { pageTextBlock.Text = e.Result; }
Windows Phone Отправка запроса 69 private void loadButton_Click(object sender, RoutedEventArgs e) { client.DownloadStringAsync(new Uri(urlTextBox.Text)); }
Windows Phone Краткие итоги 70
Раздел 6.5
Windows Phone Темы раздела 72
Windows Phone Чтение сообщений Twitter 73
Windows Phone Чтение сообщений Twitter 74 private void loadButton_Click(object sender, RoutedEventArgs e) { string url = " + nameTextBox.Text + ".xml"; client.DownloadStringAsync(new Uri(url)); }
Windows Phone Структурированные данные 75
Windows Phone Структура информации Twitter 76 Tue Oct 12 11:57: Hello from Twitter Rob Miles
Windows Phone Выполнение запроса LINQ 77 XElement TwitterElement = XElement.Parse(twitterText);
Windows Phone Класс для представления данных 78 public class TwitterPost { public string PostText { get; set; } public string DatePosted { get; set; } public string UserImage { get; set; } }
Windows Phone Создание запроса LINQ 79 var postList = from tweet in twitterElements.Descendants("status") select new TwitterPost { UserImage = tweet.Element("user"). Element("profile_image_url").Value, PostText = tweet.Element("text").Value, DatePosted = tweet.Element("created_at").Value };
Windows Phone Поиск XML-элементов 80 var postList = from tweet in twitterElements.Descendants("status") select new TwitterPost { UserImage = tweet.Element("user"). Element("profile_image_url").Value, PostText = tweet.Element("text").Value, DatePosted = tweet.Element("created_at").Value };
Windows Phone Внешний вид сообщений 81
Windows Phone Шаблон разметки сообщения 82
Windows Phone Фотография 83
Windows Phone Сообщение 84
Windows Phone Полный код списка ListBox 85
Windows Phone Указание источника данных 86 tweetsListBox.ItemsSource = postList;
Windows Phone Краткие итоги 87
Раздел 6.6
Windows Phone Темы раздела 89
Windows Phone Службы и прокси-объекты 90
Windows Phone Создание службы 91
Windows Phone Служба «Новость дня» 92 [ServiceContract] public interface INewsOfTheDayService { [OperationContract] string GetData (int value); }
Windows Phone Атрибуты Contract 93 [ServiceContract] public interface IJokeOfTheDayService { [OperationContract] string GetJoke(int jokeStrength); }
Windows Phone Метод службы «Новость дня» 94 public class NewsOfTheDayService : INewsOfTheDayService { public string GetData(int value) { string result; switch (value) { case 1: result = "Новость 1"; break; case 2: result = "Новость 2"; break; case 3: result = "Новость 3"; break; default: result = "Выбрана несуществующая категория"; break; } return result; } }
Windows Phone Запуск службы в Visual Studio 95
Windows Phone Описание службы 96
Windows Phone Создание ссылки на службу 97
Windows Phone Создание прокси-объекта 98 NewsOfTheDayService.NewsOfTheDayServiceClient newsclient; // Конструктор public MainPage() { InitializeComponent(); newsclient = new NewsOfTheDayService.NewsOfTheDayServiceClient(); jokeService.GetDataCompleted += new EventHandler (newsclient _GetJokeCompleted); }
Windows Phone Вывод результатов 99 void newsclient_GetDataCompleted(object sender, NewsOfTheDayService.GetDataCompletedEventArgs e) { if (!e.Cancelled) { newsTextBlock.Text = e.Result; } }
Windows Phone Вызов метода службы 100 private void getNewsButton_Click(object sender, RoutedEventArgs e) { int category = 0; if (int.TryParse(strengthTextBox.Text, out category)) { newsclient.GetJokeAsync(category); } }
Windows Phone Краткие итоги 101