【问题标题】:WIFI Direct IP Address issueWIFI直接IP地址问题
【发布时间】:2013-08-23 19:32:26
【问题描述】:

我检查了发现问题是分配给connectionEndpointPair的ip地址携带的是wi-fi直接网络适配器的IP,我不知道如何打开该特定ip上的端口,ip与我从我的电脑 ping 它时不同,当我使用 wi-fi ip 时,windows 正在侦听端口 5009 并建立了连接,但是当我使用 wi-fi 直接 ip 地址时,我遇到了问题

设备和 windows 8.1 应用程序之间的 wi-fi 直接连接正常,然后我正在等待我的套接字连接但它没有发生可能是什么问题?

我在 Visual Studio 上遇到错误:

由于目标机器主动拒绝,无法建立连接。 (HRESULT 异常:0x8007274D)

在 Windows 端,我正在使用此代码:

String deviceSelector = WiFiDirectDevice.GetDeviceSelector();

        DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(deviceSelector);

        if(deviceCollection.Count > 0)
        {
            try
            {
                wfdDevice = await WiFiDirectDevice.FromIdAsync(deviceCollection[0].Id);

                wfdDevice.ConnectionStatusChanged +=ConnectionStatusChangedNotficationHandler;



                var endpointPairs = wfdDevice.GetConnectionEndpointPairs();
                EndpointPair connectionEndpointPair = endpointPairs[0];

                try
                {
                    connectionEndpointPair.RemoteServiceName = "5009";


                    StreamSocket socket = new StreamSocket();
                    await socket.ConnectAsync(connectionEndpointPair);

                    string s = "hello";
                }catch (Exception err)
                {
                    string s = err.Message;
                    s = err.StackTrace;
                }
            }
            catch (Exception err)
            {
                string error = err.Message;

            }

在 android 端,我正在使用此代码:

               private void initiateClientSocket(String hostAddress) {


        int timeout = 10000;
        int port = 5009;

        InetSocketAddress socketAddress 
          = new InetSocketAddress(hostAddress, port);

        try {
          Socket socket = new Socket();
          socket.bind(null);
          socket.connect(socketAddress, timeout);
        } catch (IOException e) {
          Log.e(TAG, "IO Exception.", e);
        }

        // TODO Start Receiving Messages
      }

从我得到的 android 端:

java.net.UnknownHostException: Host is unresolved: my ip

请大家帮忙

谢谢:)

【问题讨论】:

  • 你是否让它与 wifi direct 一起工作?我想知道我是否可以完成这项工作......

标签: c# java android sockets wifi-direct


【解决方案1】:

即使安卓手机和windows电脑有直接WIFI连接,也需要服务器和客户端进行tcp连接。

我不知道您的应用程序的用途,但我认为 Windows 计算机是服务器的更好选择。因此,您应该在计算机上为该端口打开一个侦听器,而不是连接到套接字。

与所选StreamSocket 类相关的服务器类是StreamSocketListener。您可以在此处找到文档:http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocketlistener.aspx

本文档中还有一段关于典型操作顺序的内容:

  • 创建 StreamSocketListener。
  • 使用 Control 属性检索 StreamSocketListenerControl 对象并设置所需的套接字服务质量。
  • 将 ConnectionReceived 事件分配给事件处理程序。
  • 调用 BindServiceNameAsync 或 BindEndpointAsync 方法以绑定到本地 TCP 端口或服务名称。
  • 收到连接后,使用 StreamSocketListenerConnectionReceivedEventArgs 对象检索已创建 StreamSocket 对象的 Socket 属性。
  • 使用 StreamSocket 对象发送和接收数据。
  • 调用 Close 方法停止侦听和接受传入的网络连接,并释放与 StreamSocketListener 对象关联的所有非托管资源。接收到连接时创建的任何 StreamSocket 对象都不受影响,可以根据需要继续使用。

我没有学过这个特殊的课程,但是 TCP 的基础总是一样的......

【讨论】:

    【解决方案2】:

    我不太明白你在Window上的代码,但猜想下面的代码有问题

    connectionEndpointPair.RemoteServiceName = "5009";
    

    似乎“RemoteServiceName”与端口号5009无关。请检查struct/object“connectionEndpointPair”中的其他字段并进行适当的设置。

    【讨论】:

    • 嗨丹尼尔谢谢我检查并发现问题是分配给connectionEndpointPair的IP地址带有wi-fi direct网络适配器的IP,我不知道如何打开该特定IP上的端口,该IP与我从我的PC ping它时的IP不同,Windows正在侦听端口5009并在我使用wi-fi ip时建立了连接,但是当我使用wi-fi直接IP地址时,我是有问题
    • RemoteServiceName 是设置端口号的正确属性:RemoteServiceName 属性可以包含远程网络目标的服务名称或 TCP 或 UDP 端口号。(来自 MSDN :msdn.microsoft.com/en-us/library/windows/apps/…)
    • 你能用 WiFi-direct IP 互相 ping 通吗?端口号与 IP 地址无关。我猜想监听端口 5009 将接收来自两个 IP 地址的传入数据。如果你能 ping 通,那么你应该能够在 5009 上接收数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    相关资源
    最近更新 更多