質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Q&A

解決済

1回答

1704閲覧

android とPCとの通信でSocket s = new Socket()で処理が止まってしまう

yutainoue

総合スコア5

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

0グッド

0クリップ

投稿2019/10/02 17:47

###はじめに
android stadioとeclipseを用いてセンサ情報をPCへ送る処理を行っています。
一度,それらの処理に成功していましたが,プログラムを変更した際に動かなくなってしまいました。

私としまして,初歩的なミスだと思っておりますが中々解決できないのでよろしくお願いします。

###問題点
mainスレッドでセンサデータを取得しスレッドを用いてTCP通信を行います。
ここでスレッドスタートまで実行されたことは確認できましたが、スレッド内の
Socket socket = new Socket(Ip,Port);
でスレッドが止まってしまっているのを確認しました.

受信側もsocketをacceptの状態で止まっています.

プログラム以外でも要因がある可能性がありますので、ソケット通信で気をつける点等教えてください

Android Stadio

java

1package com.e.myapplication4; 2 3import android.app.Activity; 4import android.content.pm.ActivityInfo; 5import android.graphics.Color; 6import android.hardware.Sensor; 7import android.hardware.SensorEvent; 8import android.hardware.SensorEventListener; 9import android.hardware.SensorManager; 10import android.os.Bundle; 11import android.view.View; 12import android.widget.TextView; 13import android.util.Log; 14 15import java.text.DateFormat; 16import java.text.SimpleDateFormat; 17import java.util.Date; 18 19import java.util.Locale; 20 21// 22//世界座標系の加速度と方位を取得するhttps://qiita.com/ryskiwt/items/f6d98c0a82ba7e31c9b3 23public class MainActivity extends Activity 24 implements SensorEventListener, View.OnClickListener{ 25 26 27 public String sendingStr[] = new String[10]; 28// 29 //-- --// 30 private SensorManager sensorManager; 31 private Sensor accel; 32 private Sensor gyro; 33 private Sensor magn; 34 private TextView textView; 35 36 private LineChart mChart; 37 public String[] labels = new String[]{ 38 "linear_accelerationX", 39 "linear_accelerationY", 40 "linear_accelerationZ"}; 41 private int[] colors = new int[]{ 42 Color.BLUE, 43 Color.GRAY, 44 Color.MAGENTA}; 45 46 private boolean lineardata = true; 47 float gravity[] = new float[3]; 48 float gyroscope[] = new float[3]; 49 float magnetic[] = new float[3]; 50 public float linear_acceleration[] = new float[3]; 51 52 53 @Override 54 protected void onCreate(Bundle savedInstanceState) { 55 56 super.onCreate(savedInstanceState); 57 setContentView(R.layout.activity_main); 58 findViewById(R.id.button_start).setOnClickListener(new View.OnClickListener() { 59 60 @Override 61 public void onClick(View v) { 62 63 64 } 65 }); 66 // 縦画面 67 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 68 69 // Get an instance of the SensorManager 70 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 71 72 // Get an instance of the TextView 73 textView = findViewById(R.id.text_view); 74 75 } 76 77 @Override 78 protected void onResume() { 79 super.onResume(); 80 // Listenerの登録 81 accel = sensorManager.getDefaultSensor( 82 Sensor.TYPE_ACCELEROMETER); 83 gyro = sensorManager.getDefaultSensor( 84 Sensor.TYPE_GYROSCOPE); 85 magn = sensorManager.getDefaultSensor( 86 Sensor.TYPE_MAGNETIC_FIELD); 87 88 89 sensorManager.registerListener(this, accel, 90 SensorManager.SENSOR_DELAY_NORMAL);//周波数50Hz 91 sensorManager.registerListener(this, gyro, 92 SensorManager.SENSOR_DELAY_NORMAL); 93 sensorManager.registerListener(this, magn, 94 SensorManager.SENSOR_DELAY_NORMAL); 95 } 96 97 // 解除するコードも入れる! 98 @Override 99 protected void onPause() { 100 super.onPause(); 101 // Listenerを解除 102 sensorManager.unregisterListener(this); 103 } 104 105 @Override 106 public void onSensorChanged(SensorEvent event) { 107 108 try { 109 if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 110 111 linear_acceleration[0] = event.values[0]; 112 linear_acceleration[1] = event.values[1]; 113 linear_acceleration[2] = event.values[2]; 114 115 116 String accelero; 117 118 if (!lineardata) { 119 accelero = String.format(Locale.US, 120 "X: %.3f\nY: %.3f\nZ: %.3f", 121 event.values[0], event.values[1], event.values[2]); 122 } else { 123 accelero = String.format(Locale.US, 124 "X: %.3f\nY: %.3f\nZ: %.3f", 125 gravity[0], gravity[1], gravity[2]); 126 } 127 128 textView.setText(accelero); 129 130 // data update 131 if (!lineardata) { 132 data.addEntry(new Entry(set3.getEntryCount(), event.values[i]), i); 133 } else { 134 data.addEntry(new Entry(set3.getEntryCount(), linear_acceleration[i]), i); 135 } 136 137 data.notifyDataChanged(); 138 } 139 140 } 141 } 142 else if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) { 143 144 gyroscope[0] = event.values[0]; 145 gyroscope[1] = event.values[1]; 146 gyroscope[2] = event.values[2]; 147 } 148 else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { 149 150 magnetic[0] = event.values[0]; 151 magnetic[1] = event.values[1]; 152 magnetic[2] = event.values[2]; 153 } 154 DateFormat format = new SimpleDateFormat("hh:mm:ss.SSS"); 155 String date = format.format(new Date()); 156 String accelStringX = Float.toString(linear_acceleration[0]); 157 String accelStringY = Float.toString(linear_acceleration[1]); 158 String accelStringZ = Float.toString(linear_acceleration[2]); 159 String gyroStringX = Float.toString(gyroscope[0]); 160 String gyroStringY = Float.toString(gyroscope[1]); 161 String gyroStringZ = Float.toString(gyroscope[2]); 162 String magneticStringX = Float.toString(magnetic[0]); 163 String magneticStringY = Float.toString(magnetic[1]); 164 String magneticStringZ = Float.toString(magnetic[2]); 165 166 sendingStr[0] =date; 167 sendingStr[1] = accelStringX+","+accelStringY+","+accelStringZ; 168 sendingStr[2] = gyroStringX+""+gyroStringY+","+gyroStringZ; 169 sendingStr[3] = magneticStringX+""+magneticStringY+","+magneticStringZ; 170 171 TCPsocket cl = new TCPsocket(sendingStr); 172 cl.start(); 173 Log.v("debug","start"); 174 175 }catch(Exception e){ 176 e.printStackTrace(); 177 TCPsocket cl = new TCPsocket(sendingStr); 178 cl.start(); 179 } 180 } 181 182 183 @Override 184 public void onAccuracyChanged(Sensor sensor, int accuracy) { 185 186 } 187 188} 189 190public class TCPsocket extends Thread { 191 private String Ip = "---"; //アクセス先IP 192 private int Port = 1111; //アクセス先ポート 193 public String date; 194 public String acceldata, gyrodata, magnetdata; 195 196 197 198 public TCPsocket(String str[]) { 199 this.date = str[0]; 200 this.acceldata = str[1]; 201 this.gyrodata = str[2]; 202 this.magnetdata = str[3]; 203 204 205 } 206 207 208 @Override 209 public void run() { 210 try { 211//通信用ソケット作成 212 Log.v("debug","run"); 213 214 Socket socket = new Socket(Ip, Port); 215 Log.v("debug","check"); 216 InputStream in = socket.getInputStream(); 217 OutputStream out = socket.getOutputStream(); 218 BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8")); 219 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out, "UTF-8")); 220 221 //Log.v("debug","server"); 222//テキストを送る 223 224 bw.write(this.date+","+this.acceldata + "," + this.gyrodata + "," + this.magnetdata+"\n"); 225// bw.write(this.sensordata[0]);z 226 227//データを確定させて通信処理を起こさせる 228 bw.flush(); 229 Log.v("debug","sended"); 230 231//後処理 232 in.close(); 233 out.close(); 234 socket.close(); 235 } catch (Exception e) { 236 e.printStackTrace(); 237 } 238 } 239} 240

eclipse

java

1import java.util.*; 2import java.io.*; 3import java.net.*; 4import java.net.Socket; 5import java.net.ServerSocket; 6import java.io.FileWriter; 7import java.io.IOException; 8import java.io.BufferedWriter; 9import java.io.PrintWriter; 10 11 12public class Server{ 13 public static final int PORT =1111; 14 static final String INPUT_DIR = "---"; 15 public String stopStr = null; 16 public static void main(String args[]) { 17 Server sm =new Server(); 18 19 try { 20 ServerSocket ss = new ServerSocket(PORT); 21 BufferedReader br; 22// PrintWriter pw; 23 //ファイルを開く 24 FileWriter f = new FileWriter(INPUT_DIR,false); 25 PrintWriter p = new PrintWriter(new BufferedWriter(f)); 26// p.println("時間,加速度X,加速度Y,加速度Z,ジャイロX,ジャイロY,ジャイロZ,磁気X,磁気Y,磁気Z"); 27// System.out.println("待機します"); 28 29 Socket sc; 30 31 while(true){ 32 try { 33 ss.setSoTimeout(15000); 34 System.out.println("待機します"); 35 sc = ss.accept(); 36 System.out.println("接続しました"); 37 br = new BufferedReader( 38 new InputStreamReader( 39 sc.getInputStream() 40 ) 41 ); 42 String str = br.readLine(); 43 System.out.println(str); 44 p.println(str); 45 sc.close(); 46 } 47 catch(Exception e) { 48// e.printStackTrace(); 49 System.out.println("お疲れ様でした"); 50 p.close(); 51 } 52 } 53 } 54 catch(Exception e) { 55 e.printStackTrace(); 56 } 57 } 58} 59

###状況

androidのlogcatではrunが表示し、checkは出ない状況
eclipseでは待機しますで止まっています。

アドバイスよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/10/02 23:03

「プログラムを変更した際に動かなく」なったのでしたら, 変更を戻してみては如何でしょうか.
dodox86

2019/10/02 23:37

以前に動作していたときと、ホスト(IPアドレス)/ポート番号を変えていませんか?(サーバー、クライアント共に) また、android側、run()内のtry ~ catch で例外をcatchしていないか確認してください。>e.printStackTrace()のところ
dodox86

2019/10/02 23:42

あと、直接関係ないですが質問につけているタグの「Socket.IO」は実はサーバーサイドJavaScriptのNode.js のライブラリを指します。「TCP」「ソケット」あたりが妥当でしょうか。
guest

回答1

0

自己解決

PCのキャッシュをクリアしたら解決しました.
コード自体は間違っていなかったようです.

投稿2019/10/07 14:35

yutainoue

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問