Transfert de message TCP/IP, Socket
Bonjour,
Je voudrais faire en sorte que mon smartphone fasse à la foi client et serveur.
Je n'ai pas trouvé de tutoriel adapté à mes besoins, le mieux que j'ai trouvé c'est un tuto sous Eclipse et non Android studio mais c'est très bien expliqué :
J'ai voulu tester mon client et serveur en passant par le cmd comme il l'a fait à la 11ème minute mais je rencontre quelques difficultés, en faisant la commande pour lancer la classe java il se produit ça :
http://hpics.li/335892c
Je rencontre aussi des problèmes lors du lancement de l'application mais vu que je suis encore un débutant en réseau , je ne sais pas d'ou provient le problème que je rencontre.
Voici ce qu'il se passe lorsque je clique sur le bouton qui lance la méthode testServeur() de la classe Serveur :
Code:
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
| 02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: java.net.SocketException: socket failed: EACCES (Permission denied)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at libcore.io.IoBridge.socket(IoBridge.java:623)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at java.net.PlainSocketImpl.create(PlainSocketImpl.java:198)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at java.net.PlainServerSocketImpl.create(PlainServerSocketImpl.java:38)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at java.net.ServerSocket.<init>(ServerSocket.java:103)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at java.net.ServerSocket.<init>(ServerSocket.java:74)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at com.example.matt.serveursocket.Serveur.testServeur(Serveur.java:29)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at com.example.matt.serveursocket.MainActivity.Serveur(MainActivity.java:35)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at java.lang.reflect.Method.invoke(Native Method)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at android.view.View.performClick(View.java:5254)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at android.view.View$PerformClick.run(View.java:21179)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at android.os.Looper.loop(Looper.java:145)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6837)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at java.lang.reflect.Method.invoke(Native Method)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at libcore.io.Posix.socket(Native Method)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: at libcore.io.IoBridge.socket(IoBridge.java:608)
02-01 10:54:58.811 18277-18277/com.example.matt.serveursocket W/System.err: ... 19 more |
Android Manifest.XML
Code:
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
| <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.matt.serveursocket">
<permission android:name="android.permission.INTERNET">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Serveur"
android:label="@string/title_activity_serveur"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".Client"
android:label="@string/title_activity_client"
android:theme="@style/AppTheme.NoActionBar" />
</application>
</manifest> |
TestClient.class
Code:
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
| package com.example.matt.serveursocket;
import android.os.Bundle;
import android.renderscript.ScriptGroup;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.*;
import java.util.Scanner;
public class Client extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client);
}
public void testClient(){
try {
Socket socket = new Socket("localhost", 5200);
InputStream inputStream = socket.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
OutputStream outputStream = socket.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream, true);
Scanner saisie = new Scanner(System.in);
System.out.println("Donner votre nom");
String str = saisie.next();
printWriter.println(str);
String res = bufferedReader.readLine();
System.out.println("Res = " + res);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
} |
Serveur.class
Code:
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
| package com.example.matt.serveursocket;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.*;
public class Serveur extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_serveur);
}
public void testServeur() {
try {
ServerSocket serverSocket = new ServerSocket(5200);
System.out.println("Attente de connexion");
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
OutputStream outputStream = socket.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream, true);
System.out.println("J'attend une chaine de caractères");
String str = bufferedReader.readLine();
String rep = "Bonjour Mr " + str;
System.out.println("Voici ma réponse");
printWriter.println(rep);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} |
Merci !!