如何使用wifi直接将套接字与android连接

Posted

技术标签:

【中文标题】如何使用wifi直接将套接字与android连接【英文标题】:How to connect a socket with android using wifi direct 【发布时间】:2014-12-02 20:50:11 【问题描述】:

我正在尝试使用 wifi 直接连接到从客户端到服务器的套接字,因此我在服务器上有此代码:

 ServerSocket serverSocket = new ServerSocket(2009);
 Socket client = serverSocket.accept();

我在客户端上有这段代码

final WifiP2pDevice peer = wifiP2pDeviceList.get("aMacAddress");
          WifiP2pConfig config = new WifiP2pConfig();
                            config.deviceAddress=peer.deviceAddress;
                            mManager.connect(mChannel,config,new WifiP2pManager.ActionListener() 
                                @Override
                                public void onSuccess() 
                                    mManager.requestGroupInfo(mChannel,new WifiP2pManager.GroupInfoListener() 
                                        @Override
                                        public void onGroupInfoAvailable(WifiP2pGroup group) 

                                            try 
                                                Socket socket = new Socket();

                                                int port = 2009;

                                                int timeout = 5000;
                                                socket.bind(null);

                                                socket.connect((new InetSocketAddress(peer.deviceAddress, port)), SOCKET_TIMEOUT); // Error here
                                        
                                            catch (IOException e)

                                                e.printStackTrace();
                                            

我可以直接使用 MAC 地址还是我的其他解决方案?

【问题讨论】:

哪个设备的MAC地址? 【参考方案1】:

Socket 通信需要 InetAddress 而不是 deviceAddress 字符串。

socket.connect((new InetSocketAddress(address, port)), SOCKET_TIMEOUT);

连接后即可获取groupOwnerAddress(WIFIP2P只能获取此IP地址)。

mManager.requestConnectionInfo(mChannel, new WifiP2pManager.ConnectionInfoListener() 
    @Override
    public void onConnectionInfoAvailable(WifiP2pInfo wifiP2pInfo) 
        InetAddress address = wifiP2pInfo.groupOwnerAddress;
        //socket communication
    
);

所有设备都可以获取此地址。向该地址发送消息,groupOwner 可以从套接字获取您的 IP。

【讨论】:

以上是关于如何使用wifi直接将套接字与android连接的主要内容,如果未能解决你的问题,请参考以下文章

在 android 中与套接字共享 WiFi 数据

如何使用 WIFI 将消息从 android 设备发送到 PC

如何用android手机当wifi热点

Android如何获取到连接的WIFI无线路由器的所有客户端的MAC地址?

如何为默认的swagger android客户端设置连接和套接字超时

与 AIS 转发器的 Android 套接字连接引发 IOException