Android10+ Wifi连接后Socket通信(二)

1,245 阅读1分钟

背景:手机连接到其他Ap设备热点后,与之通过Socket通信

WiFi连接

Android 10+ Wifi连接(一) 上篇文章有详细步骤,本节从已连接到设备热点开始

大坑

通过 WifiNetworkSpecifier连接wifi后,不能直接做Socket连接,需要先bind socket;network.bindSocket(socket); 否则Socket永远连接不上

mNetworkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(@NonNull Network network) {
    super.onAvailable(network);
   try {
        socket = new Socket();
        network.bindSocket(socket);
    } catch (IOException e) {
        e.printStackTrace();
    }

    ServerThread thread=new ServerThread();
    thread.start();
}

Socket连接

    class ServerThread extends Thread {
        public void run() {
            try {
            //连接
                socket.connect(new InetSocketAddress(ip, 端口));
                String socketAddress = socket.getRemoteSocketAddress().toString();
                //接收服务端返回信息
                while (true) {
                    byte[] b = new byte[1024 * 1024];
                    InputStream in = socket.getInputStream();
                    int len = in.read(b);
                    String s = new String(b, 0, len);
                    Log.e("返回:",s);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

给服务端发送消息

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            if (socket == null) return;
            OutputStream om = socket.getOutputStream();
            om.write(Constant.SERVER_TEXT.getBytes());
            om.write(“这是发送的消息”.getBytes());
            om.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}).start();