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