1
GitHub上にこのWifiDirectDemoを少し変更して実行しています。私が直面している問題は、ソケット接続を作成中です。私はそうだと思う..私は別の電話に転送するために、1つの電話で画像を選択しているとき、私のアプリはこの例外で他の電話で閉じている:Android Wifi Direct
java.net.SocketException sendto失敗したECONNRESET(ピアによって接続がリセットされました)。
私は両方の電話機をwifi経由で直接接続しています。ここで
は、私はエラーを取得していますするコードです:
これはFileTransferServiceを呼び出すことです:サーバソケットを開くために
String localIP = Utils.getLocalIPAddress();
// Trick to find the ip in the file /proc/net/arp
String client_mac_fixed = new String(this.device.deviceAddress).replace("99", "19");
String clientIP = Utils.getIPFromMac(client_mac_fixed);
Uri uri = data.getData();
TextView statusText = (TextView) mContentView.findViewById(R.id.status_text);
statusText.setText("Sending: " + uri);
Log.d(WifiDirectActivity.TAG, "Intent----------- " + uri);
Intent serviceIntent = new Intent(getActivity(), FileTransferService.class);
serviceIntent.setAction(FileTransferService.ACTION_SEND_FILE);
serviceIntent.putExtra(FileTransferService.EXTRAS_FILE_PATH, uri.toString());
if(localIP.equals(IP_SERVER)){
serviceIntent.putExtra(FileTransferService.EXTRAS_ADDRESS, clientIP);
}else{
serviceIntent.putExtra(FileTransferService.EXTRAS_ADDRESS, IP_SERVER);
}
serviceIntent.putExtra(FileTransferService.EXTRAS_PORT, PORT);
getActivity().startService(serviceIntent);
バックグラウンドタスク:最後に
protected String doInBackground(Void... params) {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
Log.d(WifiDirectActivity.TAG, "Server: Socket opened");
Socket client = serverSocket.accept();
Log.d(WifiDirectActivity.TAG, "Server: connection done");
final File f = new File("amankush.txt");
File dirs = new File(f.getParent());
if (!dirs.exists())
dirs.mkdirs();
f.createNewFile();
Log.d(WifiDirectActivity.TAG, "server: copying files " + f.toString());
InputStream str = client.getInputStream();
copyFile(str, new FileOutputStream(f));
//DataInputStream inputstream =new DataInputStream(client.getInputStream());
//String str = inputstream.readUTF();
serverSocket.close();
server_running = false;
return f.getAbsolutePath();
} catch (IOException e) {
Log.e(WifiDirectActivity.TAG, e.getMessage());
return null;
}
}
@Override
protected void onPostExecute(String result) {
if (result != null) {
statusText.setText("File copied - " + result);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
context.startActivity(intent);
}
}
@Override
protected void onPreExecute() {
statusText.setText("Opening a server socket");
}
filetransferservice :
public class FileTransferService extends IntentService
{
private static final int SOCKET_TIMEOUT = 5000;
public static final String ACTION_SEND_FILE = "com.example.android.wifidirect.SEND_FILE";
public static final String EXTRAS_FILE_PATH = "file_url";
public static final String EXTRAS_ADDRESS = "go_host";
public static final String EXTRAS_PORT = "go_port";
public FileTransferService(String name) {
super(name);
}
public FileTransferService() {
super("FileTransferService");
}
@Override
protected void onHandleIntent(Intent intent) {
Context context = getApplicationContext();
if (intent.getAction().equals(ACTION_SEND_FILE)) {
String fileUri = intent.getExtras().getString(EXTRAS_FILE_PATH);
String host = intent.getExtras().getString(EXTRAS_ADDRESS);
Socket socket = new Socket();
int port = intent.getExtras().getInt(EXTRAS_PORT);
try {
Log.d(WifiDirectActivity.TAG, "Opening client socket - ");
socket.bind(null);
socket.connect((new InetSocketAddress(host, port)), SOCKET_TIMEOUT);
if(socket.isBound() && socket.isConnected() && socket.isClosed())
Log.d(WifiDirectActivity.TAG, "Socket not bound");
Log.d(WifiDirectActivity.TAG, "Client socket - " + socket.isConnected());
OutputStream os = socket.getOutputStream();
ContentResolver cr = context.getContentResolver();
InputStream stream = null;
try {
stream = cr.openInputStream(Uri.parse(fileUri));
//stream = new DataOutputStream(socket.getOutputStream());
//stream.writeUTF("a string");
} catch (FileNotFoundException e) {
Log.d(WifiDirectActivity.TAG, e.toString());
}
DeviceDetailFragment.copyFile(stream, os);
Log.d(WifiDirectActivity.TAG, "Client: Data written");
} catch (IOException e) {
Log.e(WifiDirectActivity.TAG, e.getMessage());
} finally {
if (socket != null) {
if (socket.isConnected()) {
try {
socket.close();
} catch (IOException e) {
// Give up
e.printStackTrace();
}
}
}
}
}
これはなぜ起こっているのですか?