Сокет работает в командной строке, но не работает на Swing - PullRequest
2 голосов
/ 22 октября 2011

Этот вопрос является продолжением этого: Метод BufferedReader readLine зависает и блокирует программу

Теперь у меня есть сервер и клиент, который работает без сбоев, но затем я попыталсяреализовать интерфейс GUI, используя качели.Используя тот же код, конструктор сокета завершается ошибкой.

Мой класс выглядит так:

public class TCPClient {

    public BufferedWriter ostream = null;
    public BufferedReader istream = null;
    public TCPClient(String host, String port) throws UnknownHostException {
    InetAddress ip = InetAddress.getByName(host);

    try {
        Socket socket = new Socket(host, Integer.parseInt(port));

        ostream = new BufferedWriter(socket.getOutputStream());
        istream = new BufferedReader(new InputStreamReader(socket.getInputStream()));


    } catch (IOException ex) {
        Logger.getLogger(TCPClient.class.getName()).log(Level.SEVERE, null, ex);
    }

}

Этот код отлично работает при вызове из основной функции.В Swing у меня есть кнопка, которая вызывает следующий метод:

private void enviarMsgTCP() throws IOException {
    screenOutput.append("Sent:\n" + mensagem.getText() + "\n");
    if (client == null){
        try {
            client = new TCPClient(destIp.getText(), port.getText());
        } catch (UnknownHostException ex) {
            Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
            saidaTexto.append("Não foi possível se conectar ao host.\n");
        }
    }

Используя этот код, строка ниже (в TCPClient) выдает исключение:

Socket socket = new Socket(host, Integer.parseInt(port));

Трассировка стека исключений:

21/10/2011 21:44:42 cliente.ClienteTCP <init>
GRAVE: null
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:218)

Что это может быть?спасибо еще раз

1 Ответ

2 голосов
/ 22 октября 2011

Отказ в соединении означает, что по IP: порту, указанному вами при подключении, ничего не прослушивается.

Почему у вас все еще есть DataOutputStream?

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