J'ai récemment développé une application qui peut utiliser java socket pour se connecter à la socket serveur java dans le PC. Ce code fonctionne parfaitement lorsqu'il se connecte au serveur qu'il envoie String immédiatement après que le thread ait été appelé mais je ne sais pas pourquoi quand je ferme le serveur et l'essaye alors il ne jette pas d'exception immédiatement mais après 1 minute la page reste inactive page appelée.Exception de lancement de socket seulement après 1 minutes
Voici le fichier logcat lorsque le serveur est ouvert et aussi quand il proche: https://imgur.com/a/lOqdq
public class checksession implements Runnable
{
private Activity activity;
Socket soc;
public checksession(Activity activity)
{
//get activity from class called
this.activity=activity;
//this.soc=soc;
}
@Override
public void run()
{
try{
soc=new Socket("192.168.0.113",11000);
DataOutputStream dout=new DataOutputStream(soc.getOutputStream());
//request format --> requestkey-field required
//format for LG request--> LG-username-password
String sendrequest="SS";
//send requestcode to server
dout.writeUTF(sendrequest);
dout.flush();//refresh to make sure it send to the server
//wait for input
DataInputStream dis=new DataInputStream(soc.getInputStream());
final String codefromserver=(String)dis.readUTF();
System.out.println("reply:"+codefromserver);
String replycode[]= codefromserver.split("-");
//server reply code format
// if not used on database RE-CK-NO
//if used on database RE-CK-YES
String sessionavailableornot=replycode[2];
if(sessionavailableornot.equals("YES"))
{
activity.runOnUiThread(new Runnable() {
public void run() {
//Do your UI operations like dialog opening or Toast here
//navigate user to main screen
Intent in = new Intent(activity, sessiondetected.class);
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(in);
}
});
}
soc.close();
}catch(Exception e) {
//runOnUiThread function is to let the function to be run on main thread
//bacause UI function cannot be run on worker thread
activity.runOnUiThread(new Runnable() {
public void run() {
//Do your UI operations like dialog opening or Toast here
//navigate user back to connectionerror page so that user know
Intent inerr = new Intent(activity, serverconnectionerror.class);
inerr.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(inerr);
}
});
}
}
}
deux secondes avec 'soc.setSoTimeout (2000);' juste après 'soc = new Socket (" 192.168.0.113 ", 11000);'? –
Vous n'avez défini aucun délai d'attente ici. Vous obtenez donc les délais d'expiration par défaut de la plate-forme, qui sont d'environ une minute pour les délais d'attente de connexion, et l'infini pour les délais d'attente de lecture. Pas clair ce que vous demandez. – EJP
@MickMnemonic Il est toujours le même que j'ai défini le délai T_T –