Windows 10 개발-네트워킹

요즘에는 웹 서비스 또는 네트워크의 다른 장치와 어떻게 든 통합 된 많은 응용 프로그램을 볼 수 있습니다. 온라인 날씨 콘텐츠, 최신 뉴스, 채팅 또는 P2P 게임을 가져 오는 것은 네트워크 서비스를 사용하는 몇 가지 예입니다. 이러한 앱은 다양한 네트워킹 API를 사용하여 빌드됩니다. Windows 10에서 네트워킹 API는 속도와 메모리 성능은 물론 개발자에게 제공하는 기능과 유연성 측면에서 향상되었습니다.

능력

네트워크에 연결하려면 앱 매니페스트에 적절한 기능 요소를 추가해야합니다. 앱의 매니페스트에 네트워크 기능이 지정되지 않은 경우 앱에 네트워킹 기능이 없으며 네트워크 연결 시도가 실패합니다.

다음은 가장 많이 사용되는 네트워킹 기능입니다.

S. 아니. 기능 및 설명
1

internetClient

공항 및 커피 숍과 같은 공공 장소에서 인터넷 및 네트워크에 대한 아웃 바운드 액세스를 제공합니다. 인터넷 액세스가 필요한 대부분의 앱은이 기능을 사용해야합니다.

2

internetClientServer

인터넷 및 공항 및 커피 숍과 같은 공공 장소의 네트워크에서 앱 인바운드 및 아웃 바운드 네트워크 액세스를 제공합니다.

privateNetworkClientServer

집과 직장과 같이 사용자가 신뢰할 수있는 장소에서 앱 인바운드 및 아웃 바운드 네트워크 액세스를 제공합니다.

앱 매니페스트 파일에서 하나 이상의 기능을 정의하려면 아래에 제공된 이미지를 확인하세요.

UWP (유니버설 Windows 플랫폼)에는 다음을 대상으로하는 대규모 네트워킹 API 집합이 포함되어 있습니다.

  • 장치의 연결 상태를 쿼리하고 피어 장치에 연결합니다.
  • REST 웹 서비스와 통신 및
  • 백그라운드에서 대용량 미디어 파일 다운로드

네트워킹 기술

UWP (유니버설 Windows 플랫폼)에서 개발자는 다양한 상황에서 사용할 수있는 다음 네트워킹 기술을 사용할 수 있습니다.

소켓

소켓은 자신의 프로토콜로 다른 장치와 통신하려는 경우 사용됩니다.

  • 둘 다 사용할 수 있습니다. Windows.Networking.SocketsWinsock UWP (유니버설 Windows 플랫폼) 앱 개발자로서 다른 장치와 통신합니다.

  • Windows.Networking.Sockets UWP 개발자가 사용하도록 설계된 최신 API라는 이점이 있습니다.

  • 플랫폼 간 네트워킹 라이브러리 또는 기타 기존 Winsock 코드를 사용하는 경우 Winsock APIs.

다음 코드는 소켓 리스너를 만드는 방법을 보여줍니다.

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. 
}

다음 코드는 SocketListener_ConnectionReceived 이벤트 핸들러.

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

그만큼 WebSockets프로토콜은 웹을 통해 클라이언트와 서버간에 빠르고 안전한 양방향 통신을 제공합니다. UWP (유니버설 Windows 플랫폼) 개발자는MessageWebSocketStreamWebSocket Websocket 프로토콜을 지원하는 서버와 연결하기위한 클래스.

중요한 기능은-

  • WebSocket 프로토콜에서 데이터는 전이중 단일 소켓 연결을 통해 즉시 전송됩니다.

  • 이를 통해 두 엔드 포인트에서 실시간으로 메시지를 보내고받을 수 있습니다.

  • WebSockets 즉각적인 소셜 네트워크 알림 및 최신 정보 표시 (게임 통계)가 안전하고 빠른 데이터 전송을 사용해야하는 실시간 게임에서 사용하기에 이상적입니다.

다음 코드는 보안 연결에서 메시지를 보내고받는 방법을 보여줍니다.

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 
}

다음 코드는 연결된 이벤트에서 문자열을 수신하는 이벤트 구현을 보여줍니다. 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 네임 스페이스 API는 개발자에게 HTTP 2.0 및 HTTP 1.1 프로토콜을 사용하여 정보를 보내고받을 수있는 기능을 제공합니다.

그것은에 사용될 수 있습니다-

  • 웹 서비스 또는 웹 서버와 통신합니다.
  • 여러 개의 작은 파일을 업로드하거나 다운로드합니다.
  • 네트워크를 통해 콘텐츠를 스트리밍합니다.

다음 코드는 다음을 사용하여 GET 요청을 보내는 방법을 보여줍니다. 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; 
}