Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
3 / 3 / 2
Регистрация: 02.07.2013
Сообщений: 31
1

TCPClient виснет при чтении ответа

05.08.2014, 11:57. Показов 1727. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую. Есть что-то непонятное мне в работе программы, суть такая, программа шлет команду по TCP-IP и по идее должна получить ответ, но почему то виснет наглухо. Думаю что-то неверно написал:
Delphi
1
2
3
4
5
6
7
8
9
10
11
    
tcp.RemoteHost := '192.168.231.18';
tcp.RemotePort := '4001';
tcp.Active := true;
if tcp.Connect then
begin
  tcp.Sendln('$016');
  s := tcp.Receiveln;
  tcp.Disconnect;
end;
tcp.Active := false;
Хотя вот скрин путти, через нее все ок.
TCPClient виснет при чтении ответа

Буду признателен за помощь.
З.Ы. Так же писались программы на C# & Qt, тоже самое программа виснет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.08.2014, 11:57
Ответы с готовыми решениями:

UDP при чтении пакетов виснет форма
Пытаюсь принять пакет, но при выполнении форма виснет. Пробовал ответ запихать в таймер, но тоже...

Программа виснет при чтении ответа TcpClient
Есть программа, суть заключается в том, что она должна отправить запрос и получить ответ. private...

Windows виснет при чтении / записи DVD
Здравствуйте. Давно уже мачаюсь с этой проблемой, даже не помню с чего она началась и когда, просто...

Происходит ошибка при чтении ответа клиента в отдельном потоке
В общем, хочу написать простейший многопоточный сервер на сокетах с использованием API для Linux(в...

7
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.08.2014, 15:00 2
Вероятно ответ сервера на данный запрос по протоколу не подразумевает терминирующую строку ответа CRLF-последовательнолсть, в то время как метод ReceiveLn ожидает ее получение, прежде чем вернуть управление.
1
3 / 3 / 2
Регистрация: 02.07.2013
Сообщений: 31
05.08.2014, 16:25  [ТС] 3
Я сделал это устройство как COM порт, используя библиотеку COM порта написал код:
Delphi
1
2
3
4
5
6
7
COMPORT.Active := true;
  COMPORT.WriteAnsiChar(AnsiChar('$'));
  COMPORT.WriteAnsiChar(AnsiChar('0'));
  COMPORT.WriteAnsiChar(AnsiChar('1'));
  COMPORT.WriteAnsiChar(AnsiChar('6'));
  COMPORT.WriteAnsiChar(AnsiChar(#$D));
  Text := COMPORT.ReadAnsiString;
и он работает, возможно ли модифицировать как-то код в первом сообщении, чтобы он заработал?
0
Native x86
Эксперт Hardware
5514 / 3273 / 934
Регистрация: 13.02.2013
Сообщений: 10,424
05.08.2014, 16:37 4
Цитата Сообщение от juninhonvp Посмотреть сообщение
возможно ли модифицировать как-то код в первом сообщении, чтобы он заработал?
Перенести чтение данных в обработчик TTcpClient.OnReceive
1
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.08.2014, 16:43 5
Если работает, нужно заглянуть в реализацию ReadAnsiString и убедиться что она не ожидает CR
0
3 / 3 / 2
Регистрация: 02.07.2013
Сообщений: 31
05.08.2014, 17:13  [ТС] 6
Цитата Сообщение от mss Посмотреть сообщение
Если работает, нужно заглянуть в реализацию ReadAnsiString и убедиться что она не ожидает CR
CR - это #$D
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.08.2014, 17:28 7
Не суть как важно
Важно что если ReadAnsiString не ожидает ни CR, ни LF, ни CRLF, то метод ReceiveLn заведомо не годится, и значит вместо него придется использовать ReceiveBuf
1
3 / 3 / 2
Регистрация: 02.07.2013
Сообщений: 31
05.08.2014, 17:53  [ТС] 8
Спасибо за ответы, завтра продолжим, прогоню дебагером эту функцию, глянул, она там прилично всего вызывает, и есть что-то похожее на ожидание CR.
0
05.08.2014, 17:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2014, 17:53
Помогаю со студенческими работами здесь

DOS виснет на int 13h при чтении MBR жесткого диска
читаю MBR жесткого диска, досю гружу с флешки, как доходит до инт 13 - встает. masm .model small...

почему виснет прога на TcpClient client = server.AcceptTcpClient();
напрочь виснет форма на строке TcpClient client = server.AcceptTcpClient(); при чём сам сервер...

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

Виснет программа при компиляции, степовер не работает, так же виснет
Виснет программа при компиляции, степовер не работает, так же виснет. Программа - простейший...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru