Я работаю над приложением, я хочу сделать прослушиватель TCP. Я искал много сайтов для помощи. Я получаю ошибку исключения. Вызывается исключение закрытия сокета. МОЙ код и журнал Cat приведены ниже.
public class ListenerService extends Service {
//Socket socket;
private ServerSocket serverSocket;
BufferedReader in = null;
static String message=null;
int portNo=1619;
boolean flag=true;
final static String MY_ACTION = "MY_ACTION";
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
new Task().execute();
}
@Override
public void onDestroy() {
super.onDestroy();
flag = false;
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
stopSelf();
Log.d("Server Stoped", "Listener Serverice is Stoped");
// Toast.makeText(this, "Listener Destroyed", Toast.LENGTH_LONG).sho
}
private class Task extends AsyncTask <Void, String, String> {
@Override
protected String doInBackground(Void... params) {
try {
serverSocket = new ServerSocket(portNo);
serverSocket.setSoTimeout(0);
while (flag) {
try {
Socket clientSocket = serverSocket.accept();
BufferedReader inputReader = new BufferedReader(
new InputStreamReader(
clientSocket.getInputStream()));
System.out.println("Client said :"
+ inputReader.readLine());
message = inputReader.readLine();
Log.d("NETWORK-RECEIVE", "Message!:" + message);
publishProgress(message);
clientSocket.close();
} catch (SocketTimeoutException e) {
e.printStackTrace();
}
}
} catch (IOException e1) {
e1.printStackTrace();
} finally {
try {
if (serverSocket != null) {
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return message;
}
@Override
protected void onProgressUpdate(String... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
Intent i = new Intent();
i.setClass(getApplicationContext(), MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
startActivity(i);
messageSend(message);
}
}
protected void messageSend(String values) {
Log.d("AFTER", values);
Intent intent = new Intent();
intent.setAction(MY_ACTION);
intent.putExtra("message", values);
sendBroadcast(intent);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.d("Server Startd","Listener Serverice is running");
//Toast.makeText(getApplicationContext(),"Service Started", Toast.LENGTH_LONG).show();
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
Моя логика тоже здесь...
09-19 12:51:07.229: D/Server Stoped(17878): Listener Serverice is Stoped
09-19 12:51:07.229: W/System.err(17878): java.net.SocketException: Socket closed
09-19 12:51:07.239: W/System.err(17878): at libcore.io.Posix.accept(Native Method)
09-19 12:51:07.239: W/System.err(17878): at libcore.io.BlockGuardOs.accept(BlockGuardOs.java:55)
09-19 12:51:07.239: W/System.err(17878): at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:98)
09-19 12:51:07.239: W/System.err(17878): at java.net.ServerSocket.implAccept(ServerSocket.java:202)
09-19 12:51:07.239: W/System.err(17878): at java.net.ServerSocket.accept(ServerSocket.java:127)
09-19 12:51:07.239: W/System.err(17878): at com.vigosol.tcplistener.ListenerService$Task.doInBackground(ListenerService.java:88)
09-19 12:51:07.239: W/System.err(17878): at com.vigosol.tcplistener.ListenerService$Task.doInBackground(ListenerService.java:1)
09-19 12:51:07.239: W/System.err(17878): at android.os.AsyncTask$2.call(AsyncTask.java:264)
09-19 12:51:07.239: W/System.err(17878): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-19 12:51:07.249: W/System.err(17878): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-19 12:51:07.249: W/System.err(17878): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
09-19 12:51:07.249: W/System.err(17878): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-19 12:51:07.249: W/System.err(17878): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-19 1
может кто-нибудь помочь мне здесь? Любой орган может сказать мне, что мне здесь не хватает в коде?