Phát triển Windows 10 - Kết nối mạng

Ngày nay, bạn sẽ thấy nhiều ứng dụng, bằng cách nào đó đã tích hợp với các dịch vụ web hoặc các thiết bị khác trên mạng. Tìm nạp nội dung thời tiết trực tuyến, tin tức mới nhất, trò chuyện hoặc trò chơi ngang hàng là một số ví dụ sử dụng dịch vụ mạng. Các ứng dụng này được xây dựng bằng nhiều loại API mạng. Trong Windows 10, các API mạng được cải thiện về tốc độ và hiệu suất bộ nhớ cũng như khả năng và tính linh hoạt mà chúng cung cấp cho các nhà phát triển.

Năng lực

Để kết nối mạng, bạn phải thêm các yếu tố khả năng thích hợp vào tệp kê khai ứng dụng của mình. Nếu không có khả năng mạng nào được chỉ định trong tệp kê khai của ứng dụng, thì ứng dụng của bạn sẽ không có khả năng kết nối mạng và mọi nỗ lực kết nối với mạng sẽ không thành công.

Sau đây là các khả năng mạng được sử dụng nhiều nhất.

Không. Khả năng & Mô tả
1

internetClient

Cung cấp khả năng truy cập ra ngoài vào Internet và mạng ở những nơi công cộng, như sân bay và quán cà phê. Hầu hết các ứng dụng yêu cầu truy cập Internet sẽ sử dụng khả năng này.

2

internetClientServer

Cung cấp cho ứng dụng quyền truy cập mạng vào và ra từ Internet và các mạng ở những nơi công cộng như sân bay và quán cà phê.

3

privateNetworkClientServer

Cung cấp cho ứng dụng quyền truy cập mạng trong và ngoài ứng dụng tại những địa điểm đáng tin cậy của người dùng, như nhà riêng và cơ quan.

Để xác định một hoặc nhiều khả năng trong tệp kê khai ứng dụng của bạn, hãy xem hình ảnh được cung cấp bên dưới.

Nền tảng Windows chung (UWP) chứa một tập hợp lớn các API mạng bằng cách nhắm mục tiêu những điều sau:

  • Truy vấn trạng thái kết nối của thiết bị và kết nối với các thiết bị ngang hàng.
  • Giao tiếp với các dịch vụ web REST và
  • Tải xuống các tệp phương tiện lớn trong nền

Công nghệ mạng

Trong Universal Windows Platform (UWP), các công nghệ mạng sau đây có sẵn cho các nhà phát triển, có thể được sử dụng trong nhiều trường hợp khác nhau.

ổ cắm

Sockets được sử dụng khi bạn muốn giao tiếp với một thiết bị khác bằng giao thức của riêng bạn.

  • Bạn có thể sử dụng cả hai, Windows.Networking.SocketsWinsock để giao tiếp với các thiết bị khác với tư cách là nhà phát triển ứng dụng Nền tảng Windows chung (UWP).

  • Windows.Networking.Sockets có lợi thế là một API hiện đại, được thiết kế để các nhà phát triển UWP sử dụng.

  • Nếu bạn đang sử dụng thư viện mạng đa nền tảng hoặc mã Winsock hiện có khác, hãy sử dụng Winsock APIs.

Đoạn mã sau đây cho thấy cách tạo bộ nghe socket.

try {
 
//Create a StreamSocketListener to start listening for TCP connections. 
   Windows.Networking.Sockets.StreamSocketListener socketListener = new 
      Windows.Networking.Sockets.StreamSocketListener(); 
					  
//Hook up an event handler to call when connections are received. 
   socketListener.ConnectionReceived += SocketListener_ConnectionReceived;
   
//Start listening for incoming TCP connections on the specified port. 
   You can specify any port that's not currently in use. 
	
   await socketListener.BindServiceNameAsync("1337"); 
} catch (Exception e) {
   //Handle exception. 
}

Đoạn mã sau cho thấy việc triển khai SocketListener_ConnectionReceived xử lý sự kiện.

private async void SocketListener_ConnectionReceived(
   Windows.Networking.Sockets.StreamSocketListen er sender, 
   Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args){ 
 
   //Read line from the remote client. 
   Stream inStream = args.Socket.InputStream.AsStreamForRead(); 
   StreamReader reader = new StreamReader(inStream); 
   string request = await reader.ReadLineAsync(); 
	
   //Send the line back to the remote client. 
   Stream outStream = args.Socket.OutputStream.AsStreamForWrite(); 
   StreamWriter writer = new StreamWriter(outStream); 
	
   await writer.WriteLineAsync(request); 
   await writer.FlushAsync(); 
}

WebSocket

Các WebSocketsgiao thức cung cấp giao tiếp hai chiều nhanh chóng và an toàn giữa máy khách và máy chủ qua web. Các nhà phát triển Nền tảng Windows chung (UWP) có thể sử dụngMessageWebSocketStreamWebSocket các lớp để kết nối với các máy chủ hỗ trợ giao thức Websocket.

Các tính năng quan trọng là -

  • Theo Giao thức WebSocket, dữ liệu được truyền ngay lập tức qua kết nối ổ cắm đơn song công đầy đủ.

  • Nó cho phép gửi và nhận tin nhắn từ cả hai điểm cuối trong thời gian thực.

  • WebSockets lý tưởng để sử dụng trong trò chơi thời gian thực, nơi các thông báo mạng xã hội tức thì và hiển thị thông tin cập nhật (thống kê trò chơi) cần được bảo mật và sử dụng truyền dữ liệu nhanh.

Đoạn mã sau đây cho biết cách gửi và nhận tin nhắn trên kết nối an toàn.

MessageWebSocket webSock = new MessageWebSocket(); 
 
//In this case we will be sending/receiving a string so we need to 
   set the MessageType to Utf8. 
webSock.Control.MessageType = SocketMessageType.Utf8;  

//Add the MessageReceived event handler. 
webSock.MessageReceived += WebSock_MessageReceived;  

//Add the Closed event handler. 
webSock.Closed += WebSock_Closed; 
 
Uri serverUri = new Uri("wss://echo.websocket.org");
  
try {
   //Connect to the server. 
   await webSock.ConnectAsync(serverUri);
	
   //Send a message to the server. 
   await WebSock_SendMessage(webSock, "Hello, world!"); 
} catch (Exception ex) { 
   //Add code here to handle any exceptions 
}

Đoạn mã sau hiển thị việc triển khai sự kiện, sẽ nhận được một chuỗi từ một WebSocket.

//The MessageReceived event handler. 
private void WebSock_MessageReceived(MessageWebSocket sender, 
   MessageWebSocketMessageReceivedEventArgs args){ 

   DataReader messageReader = args.GetDataReader(); 
   messageReader.UnicodeEncoding = UnicodeEncoding.Utf8; 
   string messageString = messageReader.ReadString(
      messageReader.UnconsumedBufferLength);  
   //Add code here to do something with the string that is received. 
}

HttpClient

HttpClientWindows.Web.Http các API không gian tên, cung cấp khả năng gửi và nhận thông tin cho nhà phát triển bằng giao thức HTTP 2.0 và HTTP 1.1.

Nó có thể được sử dụng để -

  • giao tiếp với dịch vụ web hoặc máy chủ web.
  • Tải lên hoặc tải xuống một số tệp nhỏ.
  • Truyền nội dung qua mạng.

Đoạn mã sau cho biết cách gửi yêu cầu GET bằng Windows.Web.Http.HttpClientWindows.Web.Http.HttpResponseMessage.

//Create an HTTP client object 
Windows.Web.Http.HttpClient httpClient = new Windows.Web.Http.HttpClient(); 
 
//Add a user-agent header to the GET request.  
var headers = httpClient.DefaultRequestHeaders;

//The safe way to add a header value is to use the TryParseAdd method 
   and verify the return value is true, 
	
//especially if the header value is coming from user input. 
string header = "ie"; 

if (!headers.UserAgent.TryParseAdd(header)) {
   throw new Exception("Invalid header value: " + header); 
}  

header = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";
 
if (!headers.UserAgent.TryParseAdd(header)) {
   throw new Exception("Invalid header value: " + header); 
}  

Uri requestUri = new Uri("http://www.contoso.com"); 
 
//Send the GET request asynchronously and retrieve the response as a string. 
Windows.Web.Http.HttpResponseMessage httpResponse = new
   Windows.Web.Http.HttpResponseMessage(); 
string httpResponseBody = ""; 
 
try {
   //Send the GET request 
   httpResponse = await httpClient.GetAsync(requestUri); 
   httpResponse.EnsureSuccessStatusCode(); 
   httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); 
} catch (Exception ex) {
   httpResponseBody = "Error: " + ex.HResult.ToString("X") + " Message: " + ex.Message; 
}