単純な Java ソケット クライアントに問題があります。接続は適切に確立され、サーバーとクライアントの両方がデータを送受信します。クライアントが数秒間接続を失うと、ソケットは終了し、再確立されます。これは問題なく行われますが、その瞬間に、クライアントが最後に受信したメッセージ (再接続の前) が理由もなく再度受信されます (同じメッセージを 2 回受信)。
私のコードは次のとおりです。
ソケットを開始するには:
Socket sock = new Socket();
sock.bind(null);
InetSocketAddress isa = new InetSocketAddress(serverIPAddress,serverPort);
sock.connect(isa, conectionTimeOut);
sock.setKeepAlive(true);
InputStreamReader isR = new InputStreamReader(sock.getInputStream(), "UTF8");
reader = new BufferedReader(isR);
out = new BufferedWriter(new OutputStreamWriter(
    sock.getOutputStream(), "UTF8"));
データの読み取り:
public class IncomingReader implements Runnable {
    String message = "";
    @Override
    public void run() {
        Thread thisThread = Thread.currentThread();
        while (readerThread == thisThread) {
            try {
                while ((message = reader.readLine()) != null) {
                    manageServerMessage(message);
                }
            } catch (IOException e) {
                Log.d(General.TAG, e.getMessage()+" "+e.getCause());
            }
        }
接続が失われた場合:
public void stopSocket() {
    readerThread = null;
    try{
        if (reader != null){
            reader.close();
            reader=null;
        }
    } catch (IOException e) {
        Log.d(General.TAG, e.getMessage()+"    "+e.getCause());
    }
    try{
        if (out != null)
            out.close();
    } catch (IOException e) {
        Log.d(General.TAG, e.getMessage()+" "+e.getCause());
    }
    try{
        if (sock != null){
            sock.close();
            sock=null;
        }
    } catch (IOException e) {
        Log.d(General.TAG, e.getMessage()+"    "+e.getCause());
        sock=null;
    }
    readerThread = null;
}