@Kamikadze1024

Почему код помечается отладчиком как недостижимый?

Отладчик помечает код как недостижимый? Из-за этого обмен по сети не работает.
71aba37499c943718078a7e21a732b0d.png
package com.company.Network;

import java.io.*;
import java.net.*;
import java.util.LinkedList;

import Old.Message.Message;
import Tubes.Tube;

/**
 * @class Network
 * класс-поток для работы с сетью
 */

public class Network implements Runnable {
    private Tube m_in;
    private Tube m_out;

    private final int       m_port = 1300;
    private ServerSocket    m_serverSocket;
    private int             m_netType;
    private boolean         m_flag;
    LinkedList<Socket>      m_clientSocketsServers;
    Socket                  m_clientSocket;

    public Network() {
        m_netType = -1;
        m_flag    = true;
        m_clientSocketsServers
                = new LinkedList<Socket>();
    }

    public void stayServer() {
        m_netType = 0;
        try {
            m_serverSocket = new ServerSocket(m_port, 0,
                    InetAddress.getByName("localhost"));
        } catch (IOException e) {
            System.out.println(e.toString());
        }
    }

    public void stayClient() {
        m_netType = 1;
        while (m_flag) {
            try {
                m_clientSocket = new Socket(InetAddress.getByName("localhost"), m_port);
                break;
            } catch (UnknownHostException e) {
                System.out.println("Неизвестныйхост: " + "localhost");
                continue;
            } catch (IOException e) {
                System.out.println("Ошибка ввода/вывода при создании сокета " + "localhost"
                        + ":" + m_port);
                continue;
            }
        }
    }

    public void stopNet() {
        m_flag = false;
    }

    ///метод обмена информацией
    @Override
    public void run() {
        if(m_netType == -1) {
            return;
        }

        //as server
        if(m_netType == 0) {
            Socket clientSocket;
            InputStream in      = null;
            while (m_flag) {
                //чтение пришедших строк
                for (Socket ins : m_clientSocketsServers) {
                    try {
                        BufferedReader reader
                                = new BufferedReader(new InputStreamReader(ins.getInputStream()));
                        while (true) {
                            String ln = reader.readLine();
                            if(ln == null) {
                                break;
                            }
                            System.out.println(ln);
                            System.out.flush();
                        }
                        int p = 0;
                    } catch (IOException e) {
                        System.out.println("Ошибка при чтении сообщения.");
                        continue;
                    }
                }

                try {
                    clientSocket = m_serverSocket.accept();
                    m_clientSocketsServers.add(clientSocket);
                } catch (IOException e) {
                    continue;
                }
            }
        }

        //as client
        if(m_netType == 1) {
            OutputStream out     = null;
            PrintWriter writter  = null;
            try {
                out = m_clientSocket.getOutputStream();
                writter = new PrintWriter(out);
            } catch (IOException e) {
                System.out.println("Не удалось получить поток вывода.");
            }

            for(int i = 0; i < 10; i++) {
                writter.write(i);
                writter.flush();
            }
        }
    }
}
  • Вопрос задан
  • 252 просмотра
Решения вопроса 1
@zed_the_dead
Код недостижимый, потому что в выражении while(true) в качестве условия указана константа времени компиляции, и никаких проверок в рантайме на этом шаге не производится. Точку отладки можно поставить на первую строку внутри цикла. Если код и не работает - причина не в этом.

P.S. Закрыть на скриншоте строку, вызывающую проблему, баблом с описанием - зло.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Kamikadze1024 Автор вопроса
862a0b48d7cd4e0dbb307e54eb7ea6ac.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы