代码之家  ›  专栏  ›  技术社区  ›  andy

第二次传入StreamSocketListener连接后,UWP WiFi直接断开连接

  •  0
  • andy  · 技术社区  · 9 年前

    目前,我想知道我在Windows 10 IoT Core上的UWP应用程序中使用WiFi direct的问题是什么。目标是让StreamSocketListener接受来自WiFi direct的传入连接。这对我建立的第一个连接很有效,对StreamSocketListener的第二个请求破坏了WiFi直接会话,并断开了连接。作为补充,我必须使用传统的WiFi直接实现和SSID和密码短语。下面是一些示例代码

    WiFiDirectAdvertisementPublisher _publisher = new WiFiDirectAdvertisementPublisher();
    _publisher.StatusChanged += OnStatusChanged;
    
    WiFiDirectConnectionListener _listener = new WiFiDirectConnectionListener();
    
    try
    {
        _listener.ConnectionRequested += OnConnectionRequested;
    }
    catch
    {
        return;
    }
    
    _publisher.Advertisement.ListenStateDiscoverability = WiFiDirectAdvertisementListenStateDiscoverability.Normal;
    
    _publisher.Advertisement.IsAutonomousGroupOwnerEnabled = true;
    _publisher.Advertisement.LegacySettings.IsEnabled = true;
    
    PasswordCredential creds = new PasswordCredential();
    creds.Password = passphrase;
    _publisher.Advertisement.LegacySettings.Passphrase = creds;
    _publisher.Advertisement.LegacySettings.Ssid = ssid;
    
    _publisher.Start();
    
    if (_publisher.Status == WiFiDirectAdvertisementPublisherStatus.Started)
    {
        // OK
    }
    else
    {
        // Error
    }
    

    OnConnectionRequested事件处理程序

    WiFiDirectConnectionRequest connectionRequest = connectionEventArgs.GetConnectionRequest();
    
    WiFiDirectDevice wfdDevice = null;
    
    try
    {
        wfdDevice = await WiFiDirectDevice.FromIdAsync(connectionRequest.DeviceInformation.Id);
    }
    catch
    {
        //
    }
    
    wfdDevice.ConnectionStatusChanged += OnConnectionStatusChanged;
    
    listEndpointPairs = wfdDevice.GetConnectionEndpointPairs();
    

    _listener = new StreamSocketListener();
    await _listener.BindEndpointAsync(listEndpointPairs[0].LocalHostName, "80");
    listener.ConnectionReceived += (sender, args) => ConnectionReceivedHandler(args);
    

    正如我之前所说,它工作得很好,但我无法向StreamSocketListener发送第二个请求,如果我这样做,WiFi直接连接就会断开。我是错过了什么还是犯了错?

    谢谢你的建议

    2 回复  |  直到 9 年前
        1
  •  0
  •   Rita Han    9 年前

    如果在同一端口号上设置多个连接(使用“80”),则可能会出现以下异常:

    Only one usage of each socket address (protocol/network address/port) is normally permitted.
    

    here

        2
  •  0
  •   andy    8 年前

    The IoTCore device has to be the connecting device – it will not work as the advertising device with another device initiating the connection.
    

    因此,目前似乎没有办法做到这一点。