-1
最近、Javaソケットを使用してPCのjavaサーバーソケットに接続できるアプリケーションを開発しました。このコードは、スレッドが呼び出された直後にStringを送信するサーバーに接続すると完璧に動作しますが、サーバーを閉じて試してみるとわかりませんが、すぐに例外がスローされませんでした。ページが呼び出されました。1分後にソケットスロー例外が発生する
ここlogcatファイルサーバが開いていて、ときにも近いこと: あなたはソケットのタイムアウト値を指定する必要が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);
}
});
}
}
}
あなたが 'SO_TIMEOUT 'を例えばに設定しようとするとどうなりますか? 'soc = new Socket(" 192.168.0.113 "、11000)の直後に' soc.setSoTimeout(2000);を2秒間置くと '? –
ここでタイムアウトを設定していません。したがって、プラットフォームのデフォルトのタイムアウトは、接続タイムアウトの場合は約1分、読み取りタイムアウトの場合は無限大となります。あなたが何を求めているのか不明です。 – EJP
@MickMnemonicそれでも同じタイムアウトを設定してもT_T –