我正在使用WiFiDirect连接两部手机并在它们之间传输图像。我能够连接设备并将1个图像从客户端传输到服务器。当我尝试传输超过1张图像时,我失败了。
我使用onConnectionInfoAvailable方法启动我的服务器和客户端线程。
@Override
public void onConnectionInfoAvailable(WifiP2pInfo info) {
Log.i(TAG, "GO address " + info.groupOwnerAddress.getHostAddress() + " isGroupOwner " + info.isGroupOwner);
this.info = info;
if (info.groupFormed && info.isGroupOwner) {
ServerRunnable serverRunnable = new ServerRunnable(imageToBeSet);
Thread serverThread = new Thread(serverRunnable);
serverThread.start();
} else {
//Start client thread and transfer image.
}
ServerRunnable:
public class ServerRunnable implements Runnable {
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
Socket clientSocket = serverSocket.accept();
while (connected) {
try {
InputStream inputStream = clientSocket.getInputStream();
final byte[] result = streamToByteArray(inputStream);
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);
clientImage.setImageBitmap(bitmap);
}
});
} catch (Exception e) {
//Handle exception
}
}
} catch (Exception e) {
//Handle exception
}
}
}
ClientRunnable:
public class ClientRunnable implements Runnable {
public void run() {
try {
Log.d("ClientActivity", "C: Connecting...");
Thread.sleep(2000l);
socket.bind(null);
socket.connect(new InetSocketAddress(host, PORT), 5000);
while (connected) {
if(outputStream == null) {
try {
outputStream = socket.getOutputStream();
} catch (Exception e) {
// Handle exception
}
}
}
} catch (Exception e) {
// Handle exception
}
}
public void write(byte[] bytes) {
try {
outputStream.write(bytes, 0, bytes.length);
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述写入方法不起作用。当我调试时,OutputStream连接到服务器套接字我看到有关我服务器的信息(IP地址和帖子号码)。不知道为什么我的服务器没有读取写入。套接字也显示为已连接。
第一次转移工作正常。我有一个包含Previous和Next按钮的布局。按下按钮时,我想读取图像字节数组并传输它。我无法做到这一点。
如果有人知道如何创建和维护持久套接字连接,或者使用WiFiDirect从客户端向服务器传输多个图像的任何其他方式,请告诉我。我的基础是Android SDK样本中的WiFiDirectDemo。
谢谢,
阿卡什
P.S。:我还看过使用WifiP2pDnsSdService的WiFiP2PDemo。我目前正试图了解他们如何保持套接字连续聊天。