Одна проблема с использованием сокета и потоков - PullRequest
1 голос
/ 24 мая 2019

Я работаю с сокетами и потоками, и у меня есть проблема, которую я не понимаю. После accept () я вызываю thread (используя пул, созданный с помощью ThreadPoolExecutor). Вызываемый поток (waitReplay) действительно получает объект (одна команда), он создает новый ObjectInputStream, затем он что-то делает и, наконец, закрывает ObjectInputStream. Когда я отлаживаю, я вижу, что закрытие OjectInputStream (ois.close ();) сокет также был закрыт, даже soc.close () не вызывается. Конечно, следующий поток не работает.

Это телефонный код:

try {
Socket client = server.accept();    // accept che va in timeout
while (count.getCount()>0)
    pool.execute(new WaitReplay(client, count));

client.close();
accepted = true;
System.out.println("Quorum ragiunto!");

}

И вызываемая нить:

public class WaitReplay implements Runnable {
    protected Socket soc;
    protected Counter cnt;

    public WaitReplay(Socket soc, Counter cnt) {
        this.soc = soc;
        this.cnt = cnt;
    }

    public void run()  {
        ObjectInputStream   ois;    // input stream
        Message msg;
        InputStream in;

        try {
            in = soc.getInputStream();
            ois = new ObjectInputStream(in);

            msg = (Message) ois.readObject();

            System.out.println("Ricevuto: " + msg.getCmd() + ": Quorum " + cnt.getCount());
            if (msg.getCmd() == Cmnd.OK) {
            cnt.decrement();                            
        }
                ois.close();

        }
        catch (Exception e) {
            System.out.println("schiatto dentro waitreply");
            e.printStackTrace();
            return;
        }       
    }
}

1 Ответ

1 голос
/ 24 мая 2019

Это нормальное поведение. Закрытие потока закроет основной поток.

Вам не следует закрывать ObjectInputStream, если вы хотите оставить SocketInputStream открытым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...