Bonjour,

Je cherche à programmer une application qui connectera l'émulateur Android de Android Studio a un serveur local sur mon ordinateur. Cependant, lorsque je lance mon serveur, tout se passe bien, mais l'application ne fonctionne jamais quand je la lance sur l'émulateur.

Je vous donne mon code ainsi que mon fichier de log, j'ai beau cherché sur internet des solutions depuis quelques jours je n'arrive pas à faire fonctionner mon code...

Voici le code de ma classe Client sur Android Studio:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 
public class MainActivity extends AppCompatActivity {
 
    private static final int portnumber = 50000;
    private Socket socket=null;
    Socket client = null;
    DataOutputStream dataoutput = null;
    DataInputStream datainput = null;
 
    private static final String debugString ="debug";
 
    class MySyncTask extends AsyncTask<Object, Object, Void> {
        @Override
        protected Void doInBackground(Object... params) {
            try {
                //Connecting
                Log.i(debugString, "Attempting to connect to server");
                client = new Socket("10.0.2.2", portnumber);
                Log.i(debugString, "Connection established");
            } catch (IOException e) {
                Log.e(debugString, e.getMessage());
            }
 
            //Ouverture des flux
            try {
                InputStream input = client.getInputStream();
                datainput = new DataInputStream(input);
                OutputStream output = client.getOutputStream();
                dataoutput = new DataOutputStream(output);
            } catch (IOException e) {
                System.err.println("Erreur ouverture des flux joueur");
                System.exit(1);
            }
            return null;
        }
 
        protected void onPreExecute() {
            Log.i(debugString,"start");
        }
    }
 
    public MainActivity() throws UnknownHostException {
    }
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        MySyncTask asyncTask=new MySyncTask ();
        asyncTask.execute(1000);
    }
 
 
    public void sendMessage (View view)
    {
        EditText editText = (EditText) findViewById(R.id.editText);
        String nom = null;
        try {
            //Send message to server
            nom=editText.getText().toString();
            dataoutput.writeUTF(nom);
        } catch (IOException e) {
            Log.e(debugString, e.getMessage());
        }
    }
}
Le code de ma classe Serveur sur Eclipse:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
class Joueur {
    Socket joueur = null;
    DataOutputStream dataoutput = null;
    DataInputStream datainput = null;
    String name;
    String mark;
    // Constructeur : ouverture des flux
    Joueur (Socket j) {
        this.joueur = j;
        try {
            InputStream input = j.getInputStream();
            this.datainput = new DataInputStream(input);                
            OutputStream output = j.getOutputStream();
            this.dataoutput = new DataOutputStream(output);
        } catch (IOException e) {
            System.err.println("Erreur ouverture des flux serveur");
            System.exit(1);
        }
    }
}
public class Main {
    private static final int portnumber = 50000;
    public static void main(String[] args)
    {
        ServerSocket serverSocket;
        Socket socket=null;
        try {
            System.out.println("Server starting at port number " + portnumber);
            serverSocket = new ServerSocket(portnumber);
            //Client connecting
            System.out.println("waiting for clients to connect.");
            socket = serverSocket.accept();
            System.out.println("A client has connected");
        } catch (IOException e) {
            e.printStackTrace();
            System.exit(1);
        }
        Joueur joueur= new Joueur(socket);
        String nom=null;
        try {
            nom = joueur.datainput.readUTF();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(nom);    
    }
}
Et enfin mon fichier de Log:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
03-23 13:04:47.850 3499-3499/? I/art: Not late-enabling -Xcheck:jni (already on)
03-23 13:04:47.859 3499-3499/? W/art: Unexpected CPU variant for X86 using defaults: x86
03-23 13:04:48.036 3499-3504/? E/art: Failed writing handshake bytes (-1 of 14): Broken pipe
03-23 13:04:48.036 3499-3504/? I/art: Debugger is no longer active
03-23 13:04:48.037 3499-3504/? I/art: Starting a blocking GC Instrumentation
03-23 13:04:48.259 3499-3499/? W/System: ClassLoader referenced unknown path: /data/app/com.flora.drawmyfriend-2/lib/x86
03-23 13:04:48.596 3499-3499/? W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
03-23 13:04:49.126 3499-3499/com.flora.drawmyfriend I/debug: start
03-23 13:04:49.130 3499-3522/com.flora.drawmyfriend I/debug: Attempting to connect to server
03-23 13:04:49.132 3499-3522/com.flora.drawmyfriend E/debug: Permission denied
03-23 13:04:49.137 3499-3522/com.flora.drawmyfriend E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                                                                      Process: com.flora.drawmyfriend, PID: 3499
                                                                      java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                          at android.os.AsyncTask$3.done(AsyncTask.java:318)
                                                                          at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                          at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                          at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                          at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                                          at java.lang.Thread.run(Thread.java:761)
                                                                       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.InputStream java.net.Socket.getInputStream()' on a null object reference
                                                                          at com.flora.drawmyfriend.MainActivity$MySyncTask.doInBackground(MainActivity.java:45)
                                                                          at com.flora.drawmyfriend.MainActivity$MySyncTask.doInBackground(MainActivity.java:31)
                                                                          at android.os.AsyncTask$2.call(AsyncTask.java:304)
                                                                          at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                          at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)*
                                                                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)*
                                                                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)*
                                                                          at java.lang.Thread.run(Thread.java:761)*
03-23 13:04:49.175 3499-3499/com.flora.drawmyfriend I/InstantRun: Starting Instant Run Server
Merci d'avance pour votre temps, j'espère que quelqu'un pourra me débloquer..