質問編集履歴

5

質問内容の変更

2021/11/06 15:16

投稿

gken
gken

スコア4

test CHANGED
File without changes
test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
 
56
56
 
57
- ### Logcat Android(Client)側
57
+ ### Logcat Android
58
58
 
59
59
 
60
60
 
@@ -88,7 +88,7 @@
88
88
 
89
89
 
90
90
 
91
- ### ソースコード Android(Client)側
91
+ ### ソースコード Android
92
92
 
93
93
 
94
94
 
@@ -262,7 +262,7 @@
262
262
 
263
263
 
264
264
 
265
- ###変更後 Android(Client)側
265
+ ###変更後 Android
266
266
 
267
267
  ```java
268
268
 
@@ -418,7 +418,7 @@
418
418
 
419
419
  ```
420
420
 
421
- ###変更後 Logcat一部 Android(Client)側
421
+ ###変更後 Logcat一部 Android
422
422
 
423
423
  ```
424
424
 

4

質問に関係ないこと削除

2021/11/06 15:16

投稿

gken
gken

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,14 @@
1
- ### ソケッ通信よって受信したデータを書き込み後、再度アクセスしたい
1
+ ### バイ配列のデータを書き込み後、再度アクセスしたい
2
-
3
-
4
-
2
+
3
+
4
+
5
- PC(Server) - Android(Client)間でのソケット通信で画像(jpg)をPCからAndroidへ送信するためのプログラムを書いています。わからないことがあるのでご教授して頂きたいです。
5
+ 画像(jpg)をAndroidで受信するプログラムを書いています。
6
+
6
-
7
+ 画像の受信にはうまくいっていますが受信したデータの書き込み、読み込みにうまくいっていません。
7
-
8
-
8
+
9
+
10
+
9
- 画像の受信には成功していますが、画像を書き込む場所のファイル一覧を
11
+ 画像を書き込む場所のファイル一覧を
10
12
 
11
13
  ```
12
14
 
@@ -16,9 +18,13 @@
16
18
 
17
19
  で取得できていません。
18
20
 
21
+
22
+
19
23
  受信側の端末がAndroid 12(API31)のためパス(/storage/emulated/0/DCIM/Camera)を指定したアクセスができないのだと思います。
20
24
 
25
+
26
+
21
- しかし、なぜ画像の書き込みが成功したのかかりません。また、
27
+ しかし、なぜ画像の書き込みはうまくいっているのかかりません。また、
22
28
 
23
29
  /storage/emulated/0/DCIM/Cameraはカメラで撮影した写真が保存されるディレクトリでフォトで表示されるはずですが、表示できずファイルエクスプローラーでしか確認できません。
24
30
 
@@ -32,11 +38,9 @@
32
38
 
33
39
 
34
40
 
35
- ・受信した画像確認したい
41
+ ・受信したデータ(バイト配列)書き込みたい
36
-
42
+
37
- 画像保存場所のファイル一覧を取得したい
43
+ 書き込んだディレクトリ直下のファイル一覧を取得したい
38
-
39
- (今回は画像転送→一覧取得ですが、将来的にClientからServerへファイル一覧を送りClientが持っていない画像をServerからClientへ送りたいと考えているためです。)
40
44
 
41
45
 
42
46
 
@@ -234,280 +238,186 @@
234
238
 
235
239
  ```
236
240
 
241
+
242
+
243
+ ![イメージ説明](fd283ce4d21193c63064ada47e1b0cda.png)
244
+
245
+ # 試したこと
246
+
247
+ Android(Client)側のアプリ固有のディレクトリのパスを
248
+
249
+ String path = context.getFilesDir().getPath()
250
+
251
+ で取得しています。
252
+
253
+
254
+
255
+ この場合だと受信データを書き込んだ後に
256
+
257
+ File[] dataFiles = dir.listFiles()
258
+
259
+ でファイルの一覧を取得できています。アプリの固有のため受信した画像を確認することができていません
260
+
261
+
262
+
263
+
264
+
237
- ###ソースコード PC(Server)側
265
+ ###変更後 Android(Client)側
238
266
 
239
267
  ```java
240
268
 
269
+ import androidx.appcompat.app.AppCompatActivity;
270
+
271
+
272
+
273
+ import android.content.Context;
274
+
275
+ import android.os.Bundle;
276
+
277
+ import android.util.Log;
278
+
279
+
280
+
281
+ import java.io.File;
282
+
241
- import java.io.FileInputStream;
283
+ import java.io.FileOutputStream;
242
284
 
243
285
  import java.io.InputStream;
244
286
 
245
287
  import java.io.OutputStream;
246
288
 
247
- import java.net.ServerSocket;
248
-
249
289
  import java.net.Socket;
250
290
 
251
291
 
252
292
 
253
- public class Server {
254
-
255
-
256
-
257
- public static Socket socket = null;
258
-
259
- public static ServerSocket serverSocket = null;
260
-
261
-
262
-
263
- public static void main(String[] args) {
264
-
265
-
266
-
267
- String outputFilePath = null;
268
-
269
-
270
-
271
- InputStream inputStream = null;
272
-
273
- OutputStream outputStream = null;
274
-
275
-
276
-
277
- int fileLength = 0;
278
-
279
- byte[] buffer = new byte[512];
280
-
281
-
282
-
283
- try {
284
-
285
-
286
-
287
- serverSocket = new ServerSocket(2001);
288
-
289
-
290
-
291
- socket = serverSocket.accept();
292
-
293
-
294
-
295
- outputFilePath = "/home/ksato/デスクトップ/output_image.jpg";
296
-
297
- inputStream = new FileInputStream(outputFilePath);
298
-
299
- outputStream = socket.getOutputStream();
300
-
301
-
302
-
303
- while ((fileLength = inputStream.read(buffer)) > 0) {
304
-
305
- outputStream.write(buffer, 0, fileLength);
293
+ public class MainActivity extends AppCompatActivity {
294
+
295
+
296
+
297
+ public static Socket socket = null;
298
+
299
+ public static String host = "192.168.11.2";
300
+
301
+ public static int port = 2001;
302
+
303
+
304
+
305
+ @Override
306
+
307
+ protected void onCreate(Bundle savedInstanceState) {
308
+
309
+ super.onCreate(savedInstanceState);
310
+
311
+ setContentView(R.layout.activity_main);
312
+
313
+
314
+
315
+ new Thread (new Runnable(){
316
+
317
+ public void run(){
318
+
319
+
320
+
321
+ String outputFilePath = null;
322
+
323
+
324
+
325
+ InputStream inputStream = null;
326
+
327
+ FileOutputStream fileOutputstream = null;
328
+
329
+ //OutputStream outputStream = null;
330
+
331
+
332
+
333
+ int fileLength = 0;
334
+
335
+ byte[] buffer = new byte[512];
336
+
337
+
338
+
339
+ try {
340
+
341
+
342
+
343
+ socket = new Socket(host, port);
344
+
345
+ inputStream = socket.getInputStream();
346
+
347
+
348
+
349
+ Context context = getApplicationContext();//変更箇所
350
+
351
+ String path = context.getFilesDir().getPath();//変更箇所
352
+
353
+ outputFilePath =path +"/receive_image.jpg";//変更箇所
354
+
355
+ Log.d("debug","path:"+path);
356
+
357
+ Log.d("debug","outputFilePath:"+outputFilePath);
358
+
359
+
360
+
361
+ fileOutputstream = new FileOutputStream(outputFilePath);
362
+
363
+ //outputStream = new FileOutputStream(outputFilePath);
364
+
365
+
366
+
367
+ while((fileLength = inputStream.read(buffer)) > 0) {
368
+
369
+ fileOutputstream.write(buffer, 0, fileLength);
370
+
371
+ //outputStream.write(buffer, 0, fileLength);
372
+
373
+ }
374
+
375
+
376
+
377
+ fileOutputstream.flush();
378
+
379
+ fileOutputstream.close();
380
+
381
+ //outputStream.flush();
382
+
383
+ //outputStream.close();
384
+
385
+ inputStream.close();
386
+
387
+ socket.close();
388
+
389
+
390
+
391
+ File dir = new File(path);
392
+
393
+ File[] dataFiles = dir.listFiles();
394
+
395
+
396
+
397
+ Log.d("debug","length:"+dataFiles.length);
398
+
399
+ Log.d("debug","length:"+dataFiles[0].getName());
400
+
401
+
402
+
403
+ }catch (Exception e) {
404
+
405
+ e.printStackTrace();
406
+
407
+ Log.d("debug","Exception e");
408
+
409
+ }
306
410
 
307
411
  }
308
412
 
309
-
310
-
311
- outputStream.flush();
312
-
313
- outputStream.close();
314
-
315
- inputStream.close();
316
-
317
- serverSocket.close();
318
-
319
-
320
-
321
- }catch (Exception e) {
322
-
323
- e.printStackTrace();
413
+ }).start();
324
-
414
+
325
- }
415
+ }
326
-
327
-
328
-
329
- }
330
416
 
331
417
  }
332
418
 
333
419
  ```
334
420
 
335
- ![Android fileexploer](619ac511f6c0dc54597c64dc3fa5ee28.png)
336
-
337
- # 試したこと
338
-
339
- Android(Client)側のアプリ固有のディレクトリのパスを
340
-
341
- String path = context.getFilesDir().getPath()
342
-
343
- で取得しています。
344
-
345
-
346
-
347
- この場合だと受信データを書き込んだ後に
348
-
349
- File[] dataFiles = dir.listFiles()
350
-
351
- でファイルの一覧を取得できています。
352
-
353
-
354
-
355
- ###変更後 Android(Client)側
356
-
357
- ```java
358
-
359
- import androidx.appcompat.app.AppCompatActivity;
360
-
361
-
362
-
363
- import android.content.Context;
364
-
365
- import android.os.Bundle;
366
-
367
- import android.util.Log;
368
-
369
-
370
-
371
- import java.io.File;
372
-
373
- import java.io.FileOutputStream;
374
-
375
- import java.io.InputStream;
376
-
377
- import java.io.OutputStream;
378
-
379
- import java.net.Socket;
380
-
381
-
382
-
383
- public class MainActivity extends AppCompatActivity {
384
-
385
-
386
-
387
- public static Socket socket = null;
388
-
389
- public static String host = "192.168.11.2";
390
-
391
- public static int port = 2001;
392
-
393
-
394
-
395
- @Override
396
-
397
- protected void onCreate(Bundle savedInstanceState) {
398
-
399
- super.onCreate(savedInstanceState);
400
-
401
- setContentView(R.layout.activity_main);
402
-
403
-
404
-
405
- new Thread (new Runnable(){
406
-
407
- public void run(){
408
-
409
-
410
-
411
- String outputFilePath = null;
412
-
413
-
414
-
415
- InputStream inputStream = null;
416
-
417
- FileOutputStream fileOutputstream = null;
418
-
419
- //OutputStream outputStream = null;
420
-
421
-
422
-
423
- int fileLength = 0;
424
-
425
- byte[] buffer = new byte[512];
426
-
427
-
428
-
429
- try {
430
-
431
-
432
-
433
- socket = new Socket(host, port);
434
-
435
- inputStream = socket.getInputStream();
436
-
437
-
438
-
439
- Context context = getApplicationContext();//変更箇所
440
-
441
- String path = context.getFilesDir().getPath();//変更箇所
442
-
443
- outputFilePath =path +"/receive_image.jpg";//変更箇所
444
-
445
- Log.d("debug","path:"+path);
446
-
447
- Log.d("debug","outputFilePath:"+outputFilePath);
448
-
449
-
450
-
451
- fileOutputstream = new FileOutputStream(outputFilePath);
452
-
453
- //outputStream = new FileOutputStream(outputFilePath);
454
-
455
-
456
-
457
- while((fileLength = inputStream.read(buffer)) > 0) {
458
-
459
- fileOutputstream.write(buffer, 0, fileLength);
460
-
461
- //outputStream.write(buffer, 0, fileLength);
462
-
463
- }
464
-
465
-
466
-
467
- fileOutputstream.flush();
468
-
469
- fileOutputstream.close();
470
-
471
- //outputStream.flush();
472
-
473
- //outputStream.close();
474
-
475
- inputStream.close();
476
-
477
- socket.close();
478
-
479
-
480
-
481
- File dir = new File(path);
482
-
483
- File[] dataFiles = dir.listFiles();
484
-
485
-
486
-
487
- Log.d("debug","length:"+dataFiles.length);
488
-
489
- Log.d("debug","length:"+dataFiles[0].getName());
490
-
491
-
492
-
493
- }catch (Exception e) {
494
-
495
- e.printStackTrace();
496
-
497
- Log.d("debug","Exception e");
498
-
499
- }
500
-
501
- }
502
-
503
- }).start();
504
-
505
- }
506
-
507
- }
508
-
509
- ```
510
-
511
421
  ###変更後 Logcat一部 Android(Client)側
512
422
 
513
423
  ```

3

タイトルの変更

2021/11/06 15:14

投稿

gken
gken

スコア4

test CHANGED
@@ -1 +1 @@
1
- PC-Androidソケッ通信において受信デのアクセス方法が知りたいです。
1
+ Androidの内部スのアクセス方法が知りたいです。
test CHANGED
File without changes

2

タグの修正

2021/11/06 13:50

投稿

gken
gken

スコア4

test CHANGED
File without changes
test CHANGED
File without changes

1

題名の変更

2021/11/06 13:48

投稿

gken
gken

スコア4

test CHANGED
@@ -1 +1 @@
1
- PC-Android間のソケット通信において受信データの保存場所が知りたいです。
1
+ PC-Android間のソケット通信において受信データのアクセス方法が知りたいです。
test CHANGED
File without changes