Java socket connection avec Android

Fermé
hugoKoshiki Messages postés 1 Date d'inscription mercredi 25 juillet 2018 Statut Membre Dernière intervention 25 juillet 2018 - 25 juil. 2018 à 03:17
Bonjour,

J'ai un projet pour une application client-serveur
le serveur est une application java avec swing et les clients sont des application android

Je suis assez nouveaux avec les sockets

Présentement je suis capable de me connecter a mon ServerSocket dans mon java avec un client Android
Voici un example de mon code

Mon Thread Server sur mon appli Java
---------------------------------------------------------------------------------------------------------------
public class ServerStart implements Runnable
{
@Override
public void run()
{
try
{
ServerSocket serverSock = new ServerSocket(8181);

while (true)
{
Socket clientSock = serverSock.accept();
Thread listener = new Thread(new ClientHandler(clientSock));
listener.start();
}
}
catch (Exception ex)
{
txtConnect.append("Error making a connection. \n");
}
}
}
---------------------------------------------------------------------------------------------------------------
Puis mon thread qui gere mes Client
---------------------------------------------------------------------------------------------------------------
public class ClientHandler implements Runnable{

BufferedReader reader;
Socket sock;
PrintWriter client;

public ClientHandler(Socket clientSocket)
{

try
{
sock = clientSocket;
InputStreamReader isReader = new InputStreamReader(sock.getInputStream());
reader = new BufferedReader(isReader);

}
catch (Exception ex)
{
ex.printStackTrace();
txtConnect.append("Unexpected error... \n");
}

}

@Override
public void run()
{
String message;

try
{
while ((message = reader.readLine()) != null)
{
txtConnect.append(message + "\n");
}
}
catch (Exception ex)
{
txtConnect.append("Lost a connection. \n");
ex.printStackTrace();

}
}
}
----------------------------------------------------------------------------------------------------------------------------
Pour Finir mon code dans mon Android
----------------------------------------------------------------------------------------------------------------------------
public class ActivityConnection extends AppCompatActivity {

// Déclaration du textview
private TextView TextBienvenue;



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_connection);

Thread myThread = new Thread(new MyServerThread());
myThread.start();

if(myThread.isAlive()){
Toast.makeText(getApplicationContext(),"thread demarrer",Toast.LENGTH_SHORT).show();
}

TextBienvenue = (TextView) findViewById(R.id.textView_Bienvenue);
Intent intent = getIntent();
Bundle b = intent.getExtras();

if (b != null) {
String j = (String) b.get("NomJuge");
TextBienvenue.setText("Bienvenue " + j);
}

}

class MyServerThread implements Runnable
{

ServerSocket ss;
BufferedReader reader;
String message;
Handler h = new Handler();

@Override
public void run() {
try{

ss = new ServerSocket(8180);

while (true)
{

Socket clientSock = ss.accept();
InputStreamReader isReader = new InputStreamReader(clientSock.getInputStream());
reader = new BufferedReader(isReader);
message = reader.readLine();

h.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),message,Toast.LENGTH_SHORT).show();
}
});

}
}catch(IOException e){
e.printStackTrace();
}
}
}



public void send_data(View v) {

Intent intent = getIntent();
Bundle b = intent.getExtras();
String nom = (String) b.get("NomJuge");

String message = nom + " est connecter";

MessageSender b1 = new MessageSender();
b1.execute(message);

}

public class MessageSender extends AsyncTask<String, String, String> {

// Déclaration des sockets pour client
Socket s;
PrintWriter writer;


@Override
protected String doInBackground(String... voids) {

try {
String message = voids[0];
s = new Socket("192.168.136.1", 8181);
writer = new PrintWriter(s.getOutputStream());
writer.write(message);
writer.flush();
writer.close();



} catch (IOException e) {
e.printStackTrace();
}


return null;
}

}
}
-----------------------------------------------------------------------------------------------------------------------

Avec cela je suis capable d'envoyer a mon appli Java le message de mon Android

Par contre je ne suis pas capable de faire le contraire
Je part pourtant un Thread Server dans mon appli Android sur le port 8180

J'ai essayer d'ajouter ceci dans mon appli Java dans mon Thread qui gere les clients comme suit
------------------------------------------------------------------------------------------------------------------------
public class ClientHandler implements Runnable{

BufferedReader reader;
Socket sock;
PrintWriter client;

public ClientHandler(Socket clientSocket)
{

try
{
sock = clientSocket;
InputStreamReader isReader = new InputStreamReader(sock.getInputStream());
reader = new BufferedReader(isReader);
ip=(((InetSocketAddress) sock.getRemoteSocketAddress()).getAddress()).toString().replace("/","");

}
catch (Exception ex)
{
ex.printStackTrace();
txtConnect.append("Unexpected error... \n");
}

}

@Override
public void run()
{
String message;

try
{
while ((message = reader.readLine()) != null)
{
txtConnect.append(message + "\n");

try{
Socket s = new Socket(ip,8180);
client = new PrintWriter(s.getOutputStream());
client.write("Connection reussi");
client.flush();
client.close();


}catch (Exception ex){
ex.printStackTrace();
}


}
}
catch (Exception ex)
{
txtConnect.append("Lost a connection. \n");
ex.printStackTrace();

}
}
}
-----------------------------------------------------------------------------------------------------------------------
Mais sa me sort une erreur comme suit

java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at frmServeur$ClientHandler.run(frmServeur.java:185)
at java.lang.Thread.run(Thread.java:748)
-----------------------------------------------------------------------------------------------------------------------

Je roule mon appli Android sur un emulateur avec Android Studio

Je sait que sa fait beaucoup mais je suis vraiment pris avec le probleme et il me manque ce petit bout pour que le projet debloque.

Merci pour votre aide
A voir également: