Android Socket de Connexion échoue
Je suis en train d'établir une connexion entre le Client Android et C# Serveur .. Mon serveur fonctionne bien sauf le client android ne fonctionne pas, même après l'ajout de la connexion internet de l'autorisation
Voici le code :
private void connectSocket(String a){
try {
InetAddress serverAddr = InetAddress.getByName("192.168.0.2");
Log.d("TCP", "C: Connecting....");
Socket socket = new Socket(serverAddr,4444);
Log.d("TCP", "C: I dunno ...");
//String message = "1";
PrintWriter out = null;
BufferedReader in = null;
try {
// Log.d("TCP", "C: Sending: '" + message + "'");
out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//out.println(message);
while ((in.readLine()) != null) {
txt.append(in.readLine());
}
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
} catch(Exception e) {
Log.e("TCP", "S: Error", e);
} finally {
socket.close();
}
} catch (UnknownHostException e) {
//TODO Auto-generated catch block
Log.e("TCP", "C: UnknownHostException", e);
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
Log.e("TCP", "C: IOException", e);
e.printStackTrace();
}
}
Et voici le Journal de Débogage:
11-15 02:41:58.040: W/dalvikvm(26839): threadid=1: thread exiting with uncaught exception (group=0x41c352a0)
11-15 02:41:58.075: E/AndroidRuntime(26839): FATAL EXCEPTION: main
11-15 02:41:58.075: E/AndroidRuntime(26839): android.os.NetworkOnMainThreadException
11-15 02:41:58.075: E/AndroidRuntime(26839): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
11-15 02:41:58.075: E/AndroidRuntime(26839): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
11-15 02:41:58.075: E/AndroidRuntime(26839): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
11-15 02:41:58.075: E/AndroidRuntime(26839): at libcore.io.IoBridge.connect(IoBridge.java:112)
11-15 02:41:58.075: E/AndroidRuntime(26839): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
11-15 02:41:58.075: E/AndroidRuntime(26839): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
11-15 02:41:58.075: E/AndroidRuntime(26839): at java.net.Socket.startupSocket(Socket.java:566)
11-15 02:41:58.075: E/AndroidRuntime(26839): at java.net.Socket.<init>(Socket.java:225)
11-15 02:41:58.075: E/AndroidRuntime(26839): at com.example.socketclient.SocketCode.connectSocket(SocketCode.java:50)
11-15 02:41:58.075: E/AndroidRuntime(26839): at com.example.socketclient.SocketCode.access$0(SocketCode.java:44)
11-15 02:41:58.075: E/AndroidRuntime(26839): at com.example.socketclient.SocketCode$1.onClick(SocketCode.java:35)
11-15 02:41:58.075: E/AndroidRuntime(26839): at android.view.View.performClick(View.java:4211)
11-15 02:41:58.075: E/AndroidRuntime(26839): at android.view.View$PerformClick.run(View.java:17267)
11-15 02:41:58.075: E/AndroidRuntime(26839): at android.os.Handler.handleCallback(Handler.java:615)
11-15 02:41:58.075: E/AndroidRuntime(26839): at android.os.Handler.dispatchMessage(Handler.java:92)
11-15 02:41:58.075: E/AndroidRuntime(26839): at android.os.Looper.loop(Looper.java:137)
11-15 02:41:58.075: E/AndroidRuntime(26839): at android.app.ActivityThread.main(ActivityThread.java:4898)
11-15 02:41:58.075: E/AndroidRuntime(26839): at java.lang.reflect.Method.invokeNative(Native Method)
11-15 02:41:58.075: E/AndroidRuntime(26839): at java.lang.reflect.Method.invoke(Method.java:511)
11-15 02:41:58.075: E/AndroidRuntime(26839): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
11-15 02:41:58.075: E/AndroidRuntime(26839): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
11-15 02:41:58.075: E/AndroidRuntime(26839): at dalvik.system.NativeStart.main(Native Method)
Vous devez vous connecter pour publier un commentaire.
Par les regards de ce que vous essayez d'effectuer l'opération réseau sur le thread principal. Regardez le journal de trace spécialement ligne
android.os.NetworkOnMainThreadException
.Développeur Android: Réseau sur le Thread Principal Exception
Toujours faire de la mise en réseau sur un thread séparé à l'autre. Il y a différentes façons d'accomplir ainsi par exemple, vous pouvez utiliser AsyncTask ou thread de démarrage sur votre propre.
Il y a plusieurs posts sur DONC, pour ce et Android, site du Développeur. Voici quelques liens pour vous permettre de continuer:
Développeur Android: Connexion au réseau
Les Développeurs Android Blog: Multithreading pour les performances
Vérifier ce lien ici, c'est parce que depuis la dernière version de l'API, il est interdit de pratiquer l'opération réseau appelé par le thread principal, si vous avez besoin de créer un autre (arrière-plan) thread pour effectuer la place.