ソケットがしばらく閉じた

私は私のソケットを閉じているか、しばらくしてからピアによってリセットされた、私はリーダーや作家を介してガベージコレクションの問題だと思う。

応答を処理するためのAsynctask:

@Override
protected Void doInBackground(Void... params) {

    //Log.e("NEW LISTENER THREAD NAME", name);

    //initializations
    try{
        clientSocket = new Socket();
        //clientSocket.setTcpNoDelay(true);
        clientSocket.connect(new InetSocketAddress(serverURL, dataServerPort));
        requestSender = new PrintWriter(new PrintStream(clientSocket.getOutputStream(), true,"UTF-8"));
        Sender.Init();
    }catch(Exception e){
        e.printStackTrace();
    }

    gsonObj = new GsonBuilder().create();//This the object that handels every comming response
    finish = false;

    try{
        listener = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    }catch (IOException e) {
        Log.e("FROM CREATING LISTENER", "FROM CREATING LISTENER ========> ");
        e.printStackTrace();
    }

    LOGGED_IN = StaticArea.getLoggedIn(cnt);
    if(LOGGED_IN){
        USER = StaticArea.getUserName(cnt);
        Sender.ResumeUser();

        /*********DELEGATING CONNECTING TO SERVER TO BE USED IN SERVICE*************/
        Message connectionMsg = new Message();
        connectionMsg.obj = Boolean.valueOf(true);
        serviceHandler.handleMessage(connectionMsg);
        /*********END DELEGATING CONNECTING TO SERVER*************/

    }else{

        /*********DELEGATING CONNECTING TO SERVER TO BE USED IN SERVICE*************/
        Message connectionMsg = new Message();
        connectionMsg.obj = Boolean.valueOf(false);
        serviceHandler.handleMessage(connectionMsg);
        /*********END DELEGATING CONNECTING TO SERVER*************/

    }

    GoOnline();

    while(!finish){

        try{

            answerS = listener.readLine();

            if(answerS != null )//to avoid any null response
            if(answerS.contains(Response.MYRESPONSE){

                if(MyService.theHandler != null){
                    Message msg = new Message();
                            msg.obj = answerS;
                            MyService.theHandler.sendMessage(msg);

Senderクラスは、静的メソッドを持ち、ソケット出力を使用するクラスです。

public class Sender {

private static Gson gsonObj;

public static void Init() {
    gsonObj = new GsonBuilder().create();
}

public static void SendTestRequest(){

    try{
        Request req = new Request();
        req.setR_TYPE(Request.TEST);

        String reqString = gsonObj.toJson(req);
        requestSender.println(reqString);
        requestSender.flush();
    }catch(Exception e){

    }


}//end method
0
私はアンドロイドを使用しており、サーバー側でクローズされていることがわかりますが、例外はピアによって接続がリセットされたことです。私はそのライターを使用した後、クライアント側でクローズしています。その後、そのガベージコレクション.myコードは上記です。
追加された 著者 Amirali Amirale,
接続が初めてで、次に私のデバイスがアイドル状態になり、ソケットがアイドル状態になると(reader.readが着信応答を待っている)、その後他の要求を送信しようとしたときに、接続がリセットされます。ソケットはクライアント側またはサーバ側のいずれかで閉じられていますが、この場合はもちろんクライアントです。私は私のrequestSenderを使用するSenderクラスを使用していることを示唆しています。私はこれが確信していないと思う
追加された 著者 Amirali Amirale,
接続はサーバー側でスローされます。
追加された 著者 Amirali Amirale,
例外は、サーバー側でスローされます。その例外は、ソケットの1つがサーバー側またはクライアント側のいずれかで閉じられていることを意味します。クライアント側では、そうは考えにくいし、それを考えてください。
追加された 著者 Amirali Amirale,
より多くの情報が必要です。どのようなコード言語、OS、それは他の何かによって閉鎖されていることをどのように知っていますか?
追加された 著者 ChrisBD,
ここにいくつかのコードを貼り付けます。ソケットエラーをチェックしてみてください。 On Win GetLastErrorはより多くの情報を得るでしょう。
追加された 著者 Zoka,
接続相手がピアによってリセットされたとき、あなたはそれを制御できません。この例外を処理し、送受信を中断する必要があります。相手があなたの接続を切断する理由(WireSharkなどのプロトコルアナライザで確認) - 接続先のポートが存在しないか、不正な形式のメッセージを送信した可能性があります。
追加された 著者 Zoka,
例外はどこにスローされますか?
追加された 著者 Zoka,
申し訳ありませんが、私はアンドロイドプログラマーではありませんが、これはほとんど起こりそうにないです。私はガベージコレクタが使用中のものを削除するとは思わない。それでも例外がスローされるコード内の場所を指定してください。
追加された 著者 Zoka,

答えはありません

0