powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / при получении ответа от сокета программа зависает
15 сообщений из 15, страница 1 из 1
при получении ответа от сокета программа зависает
    #38459461
salaudi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Соединяюсь с сокетом. Отправляю на него сообщение. Пытаюсь получить ответ и программа как будто зависает. Уверен, что неправильно реализую получение ответа от сокета. Очень нужна помощь.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
public class SocketClient implements Runnable {
    private Thread serverThread;
    //------------------------------
    public SocketClient() {
      serverThread = new Thread(this, "Server");
      serverThread.start();
    }
    //------------------------------
    public void run() {
      String address = "DemoFix9.cfixtech.com";
      int serverPort = 5209;
      try {
      InetAddress ipAddress = InetAddress.getByName(address);
      Socket socket = new Socket(ipAddress, serverPort);
      this.console.getOut().println("Client connected");
      ObjectOutputStream outputS = new ObjectOutputStream(socket.getOutputStream());
      outputS.writeObject("hello");
     
      ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());
      String message = (String) inputStream.readObject();
      this.console.getOut().println("Message: " + message);
      inputStream.close();
      outputS.close();
      socket.close();
      }
      catch (UnknownHostException e) {
      this.console.getOut().println("UnknownHostException");
      }
      catch (IOException e) {
      this.console.getOut().println("non connected");
      }
      catch (ClassNotFoundException e) {
      this.console.getOut().println("ClassNotFoundException");
      }
    }
    //----------------------------------
    public void stopRun() {
     
    }
    }
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38459487
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
salaudi,

1. Если у вас Netbeans, то там можно запустить под дебаггингом, потом нажать паузу и увидеть где оно висит. Потому что у вас в проге нету main-а. Возможно это нормально (если вы привели только фрагмент кода), но может и нет. Поэтому даже нет 100% уверенности, что ваш run выполняется.
2. Можно поставить wireshark и посмотреть что куда уходит и что куда приходит. Причем если вы под виндой, то хост куда вы коннектитесь не должен быть той же машиной, т.к. ваершарк под виндой не умеет видеть такой трафик.

Если я перавильно понял, вам должно поступить столько же данных, сколько вы отправили. А отправлено должно быть не 0. Соответстенно, если не получено, то проблемы на "той" стороне. А если проблемы на той стороне, то нужен код той стороны.

то есть надо выяснять сколько куда ушло и сколько пришло.
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38459513
salaudi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chabapok, Добрый день.
Main есть. Просто я выложил тут только код класса, который выполнят запись и чтение из сокета. Я добавлял вывод на экран сообщений, после каждого действия (подключение к сокету, запись в сокет и чтение из сокета). Так вот, подключение и запись проходят, а когда перехожу к чтению, то программа дальше не идет. Я не использую Netbeans, я пишу Java программу из торговой программы для биржевой торговли. Так что там не проходит отладка. А подключаюсь к серверу биржи, на той стороне все впорядке.
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38459520
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавьте outputS.flush() перед тем, как начинать чтение.
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38459553
salaudi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cdtyjv, Добрый вечер. Что то не помогло.( Может как то надо переписать кусок с чтением из сокета? Добавить попытку? Или while? Я смотрел примеры с чтением из сокета, везде по разному читают.
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38459626
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда см. пункт 2.

"дальше не идет" скорей всего может быть по 1 причине - не приходит полностью обьект. (На самом деле, конечно, формально, причин может быть больше, типа своей библиотеки классов с глючным ObjectOutputStream и тд... Но все они малореальны.)

дальше надо смотреть как именно обьект приходит неполностью и разбираться почему. Ставьте wireshark или tcpdump - и вперед.
смотрим что ушло и что пришло. Сравниваем. Делаем выводы.

а "все в порядке" - это растяжимое понятие, но как правило подразумевается, что API на той стороне работает нормально. А вам этого мало, вам надо чтобы API на вашей стороне соответствовало тому, которое ожидает та сторона. А выяснить это можно тем вариантом что я предложил, или более внимательным чтением документации, или сравнивать с примерами если они есть. Но тут как вы понимаете форум ничем не поможет. А посмотреть что там у вас за байтики бегают - это "железный" способ.
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38459628
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще можно набросать простую прожку, которая ожидает подключения и отвечает теми данными, которые в нее поступают. И этой прожкой проверить свою прожку.
Если заработает - значит ваша прожка шлет на ту сторону не то, что та сторона ожидает получать.
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38459633
salaudi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chabapok, спасибо за совет. Сейчас попробую реализовать сокет-сервер на локальной машине и проверить отправку на него.
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38459636
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нате вам, у меня такая была.

ваша прога рабочая, я проверил, следовательно у вас "проблемы" с той стороной, в часности с протоколом. Дальше на доки смотреть, без них ничего конкретней сказать нельзя.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
package javaapplication1;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Echo {
    public static void main(String []args) throws IOException{        
        ServerSocket ss = new ServerSocket(5209);
        Socket sock = ss.accept();
        byte[] buf = new byte[16384];
        for(;;){
            int n = sock.getInputStream().read(buf);
            if (n==-1) break;
            sock.getOutputStream().write(buf, 0, n);
        }   
    }
}
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38459645
salaudi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chabapok, спасибо. Сейчас попробую. А Вы пробовали поставить вывод сообщении после строк:
Код: java
1.
2.
outputS.writeObject("hello");
this.console.getOut().println("message send");


и после
Код: java
1.
2.
3.
String message = (String) inputStream.readObject();
this.console.getOut().println("Message: " + message);
this.console.getOut().println("message read");



У меня при выполнении программы печатается только первое сообщение "message send".
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38459675
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я позаменял ваши this.console... на System.out.println

А смысл мне это пробовать? У меня ваш участок кода отрабатывает и номально завершается, выводя ожидаемую строку. Соответственно, если вставить туда принты, то они напечатаются в нужных местах.


У вас даже с моей прожкой не работает? Ну даже не знаю. Можно catch(Throwable th) поставить, то может у вас там OOM бросается какое-нибудь, но маловероятно конечно. Конечно, скорей всего, в таком баге виноват фаерволл. В нем может быть все дело. Например, пару месяцев назад приползло какое-то обновление семерки, которое позакрывало на фаервлое целую кучу портов. Тоже виндозное tftp перестало работать, к примеру. Помню, продолбался полдня где-то, пока понял в чем дело и как включить.


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
package javaapplication1;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class E1 {

   public static void main(String []args) throws IOException, ClassNotFoundException{
      String address = "127.0.0.1";
      int serverPort = 5209;
    
      InetAddress ipAddress = InetAddress.getByName(address);
      Socket socket = new Socket(ipAddress, serverPort);
      System.out.println("Client connected");
      ObjectOutputStream outputS = new ObjectOutputStream(socket.getOutputStream());
      outputS.writeObject("hello");
     
      ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());
      String message = (String) inputStream.readObject();
      System.out.println("Message: " + message);
      inputStream.close();
      outputS.close();
      socket.close();
    
    }
    
}
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38459997
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
salaudi,
Серверная часть тоже ваша или уже готовая?
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38460453
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick,

Маловероятно, что серверная часть его. Я думаю, если бы серверная часть была его, у него таких вопросов не возникало бы. Хотя если она "у него", но писана не им....

И маловероятно, чтобы серверная часть позволяла вот так писать в нее сериализованые стринги. Там скорей всего или http или просто строки писать надо ей.
но это уже надо документацию смотреть.
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38461067
salaudi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Garrick, нет серверная часть не у меня.
...
Рейтинг: 0 / 0
при получении ответа от сокета программа зависает
    #38461701
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
salaudi,

Часто в таких системах принимающая сторона ждёт специального символа "окончания передачи". Возможно серверная сторона ждёт его, а вы не передаёте - вот и висит. Раз серверная часть не ваша, надо прояснить у разработчика этот момент.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / при получении ответа от сокета программа зависает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]