以下は、ソケット サーバーを実装し、完全に機能する receive メソッドです。
private void Receive(){
log.info("Server started - waiting for the clients.");
try {
Boolean end = false;
ServerSocket ss = new ServerSocket(12345);
while(!end){
//Server is waiting for client here, if needed
Socket s = ss.accept();
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter output = new PrintWriter(s.getOutputStream(),true); //Autoflush
String st = input.readLine();
JSONObject jsonObj;
try {
jsonObj = new JSONObject(st);
long id = jsonObj.optLong("DeviceID", count.addAndGet(1) );
String name = jsonObj.toString();
table.put(id, name);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
etResult.setText(st);
Log.d("Tcp Example", "From client: "+st);
output.println("Response from Sever: Connectivity ok");
s.close();
if (st != null ){ end = true; }
}
ss.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
唯一の問題は、ボタンを押してそのメソッドを呼び出すと、ソケットがリッスンを開始し、クライアント メッセージを待機することです。それが起こらない間、アプリはフリーズしたままで、他のボタンを押そうとすると、アプリがクラッシュする可能性があります。
画面全体をロックせずに、ソケットを「バックグラウンド」でリッスンしたままにする方法についてのヒントはありますか?
ありがとうございました