Java Android p2p WiFi Direct。输入输出流问题

Java Android p2p WiFi Direct。输入输出流问题,java,android,wifi,p2p,Java,Android,Wifi,P2p,有人能帮我解决这个问题吗?我想在两台设备之间创建p2p连接。我试着按照官方的教程去做每件事,但仍然不起作用 这是我的连接信息侦听器: private void setConnectionInfoListener() { if(connectionInfoListener == null) { connectionInfoListener = new WifiP2pManager.ConnectionInfoListener() {

有人能帮我解决这个问题吗?我想在两台设备之间创建p2p连接。我试着按照官方的教程去做每件事,但仍然不起作用

这是我的连接信息侦听器:

private void setConnectionInfoListener() {
        if(connectionInfoListener == null) {
            connectionInfoListener = new WifiP2pManager.ConnectionInfoListener() {
                @Override
                public void onConnectionInfoAvailable(WifiP2pInfo info) {
                    final InetAddress ownerAddress = info.groupOwnerAddress;

                    if (info.groupFormed && info.isGroupOwner) {

                            serverThread = new ServerThread();
                            serverThread.execute();
                       
                    } else if (info.groupFormed) {
                            clientThread = new ClientThread(ownerAddress);
                            clientThread.execute();
                    }
                }
            };
        }
    }
这是ClientThread类:

public class ClientThread extends AsyncTask<Void, Void, Void> {

        Socket socket;
        String hostAdd;

        public ClientThread(InetAddress hostAddress) {
            hostAdd = hostAddress.getHostAddress();
            socket = new Socket();
        }


        @Override
        protected Void doInBackground(Void... voids) {
            try {
                socket.bind(null);
                socket.connect(new InetSocketAddress(hostAdd, 8888), 5000);

            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
                clientServerSendReceive = new SendReceive(socket);
                clientServerSendReceive.start();
        }
    }
public class ServerThread extends AsyncTask<Void, Void, Void> {

        Socket socket;
        ServerSocket serverSocket;


        @Override
        protected Void doInBackground(Void... voids) {

            try {
                    serverSocket = new ServerSocket(8888);
                    socket = serverSocket.accept();

            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            clientServerSendReceive = new SendReceive(socket);
            clientServerSendReceive.start();
        }
    }
问题是:当我在两个设备之间建立连接时,我会检查套接字是否已连接。它始终是连接的,没有任何问题。在分配输入流和输出流之前,我还检查了连接。但当我尝试使用“write”方法发送数据时,什么也没发生。输入流只是保持侦听和等待数据,但不从其他设备获取任何数据。我很乐意得到任何帮助

附言:解决了! 我所需要做的就是为“write”方法创建一个单独的线程。此方法在主线程中不起作用


 private class SendReceive extends Thread {
        Socket socket;
        OutputStream outputStream;
        InputStream inputStream;


        private SendReceive(Socket skt) {
            socket = skt;
            try {
                inputStream = socket.getInputStream();
                outputStream = socket.getOutputStream();
            } catch (IOException e) {
                Log.d(LOG, "Error while getting streams: " + e.getMessage());
            }
        }

        public void write(byte[] bytes){
            try {
                outputStream.write(bytes);
                outputStream.flush();
            } catch (IOException e) {
                e.printStackTrace();
                Log.d(LOG, "Error while writing: " + e.getMessage());
            }
        }

        @Override
        public void run() {
            byte[] buffer = new byte[1024];
            int bytes = -1;
            while (socket != null) {
                try {
                    if(inputStream.available() > 0) {
                        bytes = inputStream.read(buffer);
                    }
                    if (bytes > 0) {
                        handler.obtainMessage(ON_MESSAGE_READ, bytes, -1, buffer).sendToTarget();
                    }
                } catch (IOException e) {
                    Log.d(LOG, e.getMessage());
                }
            }
        }
    }