PeerFinder.ConnectAsync | connectAsync Method
FindAllPeersAsync 메서드에 대한 호출로 발견한 피어에 연결합니다.
구문
매개 변수
- peerInformation
-
유형: PeerInformation
연결할 피어를 나타내는 피어 정보 개체입니다.
반환 값
유형: IAsyncOperation<StreamSocket>
제공된 StreamSocket 개체를 사용하여 원격 피어에 연결하기 위한 비동기 작업입니다.
설명
FindAllPeersAsync 메서드에 대한 호출이나 ConnectionRequested 이벤트에 대한 처리기에서 피어에 대한 PeerInformation 개체의 인스턴스를 가져올 수 있습니다.
앱에서 ConnectAsync 메서드를 호출하여 피어와의 연결을 만들 경우 앱은 더 이상 연결을 알리지 않고 앱이 Close 메서드를 호출하여 소켓 연결을 닫을 때까지 앱은 FindAllPeersAsync 메서드에서 발견되지 않습니다.
ConnectAsync 메서드를 호출하여 소켓 연결을 열 경우 컴퓨터에 대해 한번에 소켓 연결 한 개만 열 수 있습니다. 사용 중인 앱 또는 다른 앱에서 ConnectAsync 메서드를 호출할 경우 기존 소켓 연결이 닫힙니다.
Windows Phone 8
Wi-Fi Direct는 Windows Phone 8에서 지원되지 않습니다. 자세한 내용은 근접 연결을 참조하십시오.
예제
protected override void OnNavigatedTo(NavigationEventArgs e) { DisplayNameTextBox.Text = Windows.Networking.Proximity.PeerFinder.DisplayName; Windows.Networking.Proximity.PeerFinder.ConnectionRequested += ConnectionRequested; // If activated from launch or from the background, create a peer connection. var args = e.Parameter as Windows.ApplicationModel.Activation.LaunchActivatedEventArgs; if (args != null && args.Kind == Windows.ApplicationModel.Activation.ActivationKind.Launch) { if (args.Arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket") { AdvertiseForPeersButton_Click(null, null); } } } protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) { if (_started) { // Detach the callback handler (there can only be one PeerConnectProgress handler). Windows.Networking.Proximity.PeerFinder.TriggeredConnectionStateChanged -= TriggeredConnectionStateChanged; // Detach the incoming connection request event handler. Windows.Networking.Proximity.PeerFinder.ConnectionRequested -= ConnectionRequested; Windows.Networking.Proximity.PeerFinder.Stop(); CloseSocket(); _started = false; } } // Write a message to MessageBlock on the UI thread. private Windows.UI.Core.CoreDispatcher messageDispatcher = Window.Current.CoreWindow.Dispatcher; async private void WriteMessageText(string message, bool overwrite = false) { await messageDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { if (overwrite) MessageBlock.Text = message; else MessageBlock.Text += message; }); } bool _started = false; // Click event handler for "Advertise" button. private void AdvertiseForPeersButton_Click(object sender, RoutedEventArgs e) { if (_started) { WriteMessageText("You are already advertising for a connection.\n"); return; } Windows.Networking.Proximity.PeerFinder.DisplayName = DisplayNameTextBox.Text; if ((Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes & Windows.Networking.Proximity.PeerDiscoveryTypes.Triggered) == Windows.Networking.Proximity.PeerDiscoveryTypes.Triggered) { Windows.Networking.Proximity.PeerFinder.TriggeredConnectionStateChanged += TriggeredConnectionStateChanged; WriteMessageText("You can tap to connect a peer device that is " + "also advertising for a connection.\n"); } else { WriteMessageText("Tap to connect is not supported.\n"); } if ((Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes & Windows.Networking.Proximity.PeerDiscoveryTypes.Browse) != Windows.Networking.Proximity.PeerDiscoveryTypes.Browse) { WriteMessageText("Peer discovery using Wifi-Direct is not supported.\n"); } Windows.Networking.Proximity.PeerFinder.Start(); _started = true; } private void TriggeredConnectionStateChanged( object sender, Windows.Networking.Proximity.TriggeredConnectionStateChangedEventArgs e) { if (e.State == Windows.Networking.Proximity.TriggeredConnectState.PeerFound) { WriteMessageText("Peer found. You may now pull your devices out of proximity.\n"); } if (e.State == Windows.Networking.Proximity.TriggeredConnectState.Completed) { WriteMessageText("Connected. You may now send a message.\n"); SendMessage(e.Socket); } } // Click event handler for "Browse" button. async private void FindPeersButton_Click(object sender, RoutedEventArgs e) { if ((Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes & Windows.Networking.Proximity.PeerDiscoveryTypes.Browse) != Windows.Networking.Proximity.PeerDiscoveryTypes.Browse) { WriteMessageText("Peer discovery using Wifi-Direct is not supported.\n"); return; } try { var peerInfoCollection = await Windows.Networking.Proximity.PeerFinder.FindAllPeersAsync(); if (peerInfoCollection.Count > 0) { // Connect to first peer found - example only. // In your app, provide the user with a list of available peers. ConnectToPeer(peerInfoCollection[0]); } } catch (Exception err) { WriteMessageText("Error finding peers: " + err.Message + "\n"); } } async private void ConnectToPeer(Windows.Networking.Proximity.PeerInformation peerInfo) { WriteMessageText("Peer found. Connecting to " + peerInfo.DisplayName + "\n"); try { Windows.Networking.Sockets.StreamSocket socket = await Windows.Networking.Proximity.PeerFinder.ConnectAsync(peerInfo); WriteMessageText("Connection successful. You may now send messages.\n"); SendMessage(socket); } catch (Exception err) { WriteMessageText("Connection failed: " + err.Message + "\n"); } requestingPeer = null; } // Click event handler for "Stop" button. private void StopFindingPeersButton_Click(object sender, RoutedEventArgs e) { _started = false; Windows.Networking.Proximity.PeerFinder.Stop(); if (proximitySocket != null) { CloseSocket(); } } // Handle external connection requests. Windows.Networking.Proximity.PeerInformation requestingPeer; private void ConnectionRequested(object sender, Windows.Networking.Proximity.ConnectionRequestedEventArgs e) { WriteMessageText("Connection requested by " + requestingPeer.DisplayName + ". " + "Click 'Accept Connection' to connect."); requestingPeer = e.PeerInformation; } private void AcceptConnectionButton_Click(object sender, RoutedEventArgs e) { if (requestingPeer == null) { WriteMessageText("No peer connection has been requested."); return; } ConnectToPeer(requestingPeer); }
요구 사항
|
지원되는 최소 클라이언트 | Windows 8 |
|---|---|
|
지원되는 최소 서버 | Windows Server 2012 |
|
지원되는 최소 전화 | Windows Phone 8 |
|
네임스페이스 |
|
|
메타데이터 |
|
참고 항목
- PeerFinder
- FindAllPeersAsync
- PeerInformation
- ConnectionRequested
- 근접 연결 및 탭(JavaScript)
- 근접 연결 및 탭(C#/VB/C++)
- 샘플
- 근접 연결 샘플