Je travaille sur l'application, je veux faire un auditeur TCP. J'ai cherché de nombreux sites pour de l'aide. Je reçois une erreur d'exception. Appelé Socket Closed Exception. Mon code et mon chat sont donnés ci-dessous.Socket Closed Exception?
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;
}
}
Mon logcate est ici ...
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
certains peuvent me aider? Tout organisme peut me dire ce que je suis absent ici dans le code?