WIFI直接IP地址问题

时间:2013-08-23 19:32:26

标签: c# java android sockets wifi-direct

我已检查并发现问题是分配给connectionEndpointPair的IP地址是携带wi-fi直接网络适配器的IP而我不知道如何在该特定ip上打开端口,ip不同于我从我的电脑ping它时,Windows正在侦听端口5009并建立连接,当我使用Wi-Fi IP,但当我使用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:主机未解析:我的ip

可以请任何帮助

谢谢:)

2 个答案:

答案 0 :(得分:4)

即使您在Android手机和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的基础知识总是一样......

答案 1 :(得分:2)

我不太了解您在Window上的代码,但猜测以下代码存在问题

connectionEndpointPair.RemoteServiceName = "5009";

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