Отправка int в Java.Иногда вызывает исключение? - PullRequest
1 голос
/ 15 марта 2011

хорошо, я отправляю int из одной Java-программы в другую (на том же компьютере в минуту).Однако иногда я получаю исключение, и оно не подключается:

Исключение в потоке "main" java.net.ConnectException: Соединение отклонено: connect at java.net.PlainSocketImpl.socketConnect (собственный метод) на java.net.PlainSocketImpl.doConnect (PlainSocketImpl.java:333) на java.net.PlainSocketImpl.connectToAddress (PlainSocketImpl.java:195) на java.net.PlainSocketImpl.connect (PlainSocketImp.18)..SocksSocketImpl.connect (SocksSocketImpl.java:366) на java.net.Socket.connect (Socket.java:529) на java.net.Socket.connect (Socket.java:478) на java.net.Socket. (Сокет.java: 375) на java.net.Socket. (Socket.java:189) на Client.main (Client.java:6)

Вот код для отправки:

        Socket socket = new Socket("localhost" , 8080);
    DataOutputStream out = new DataOutputStream(socket.getOutputStream());
    out.writeInt(5);
    socket.close();

и для получения:

    ServerSocket serverSocket = new ServerSocket(8080);
    Socket socket = serverSocket.accept();

    DataInputStream din = new DataInputStream(socket.getInputStream());
    System.out.println(din.readInt());
            socket.close();

Это просто странно, потому что иногда это будет работать, а иногда нет.У кого-нибудь есть идеи, почему?

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Бьюсь об заклад, вы получите эту ошибку, если вы:

  1. запусти свой сервер
  2. Начни свой клиент
  3. Запустите ваш клиент снова, без перезапуска сервера

Ваш сервер принимает только одно соединение, а затем завершается.

Если вы хотите принять неограниченное количество последовательных соединений, окружите ваш серверный код такой петлей:

ServerSocket serverSocket = new ServerSocket(8080);
while (true) {
  Socket socket = serverSocket.accept();
  DataInputStream din = new DataInputStream(socket.getInputStream());      
  System.out.println(din.readInt());              
  socket.close();
}

После обслуживания запроса он снова прослушает другой запрос или примет ожидающий запрос.

1 голос
/ 15 марта 2011

Цитирование из описание исключения :

"Сигнализирует о том, что произошла ошибка при попытке подключить сокет к удаленному адресу и порту. Как правило, подключение было отклонено удаленно (например, никакой процесс не прослушивает удаленный адрес / порт)."

Скорее всего, порт ничего не слушает. Код вашего сервера принимает одно соединение и затем закрывается, поэтому, если вы не перезапускаете сервер для каждого соединения, это наиболее вероятная причина. Если нет, проверьте, запущено ли приложение на вашем сервере.

...