Название: Необработанное исключение при отправке ответа через сокет Отправлено: niklep от Апрель 26, 2011, 23:18 Доброго времени суток. Есть слот, связанный с сигналом:
Код: connect(clientSocket, SIGNAL(readyRead()), Код: void ServerSocket::slotReadClient() И так. Объясняю, в чем смысл. На серверный сокет приходит из другого приложения команда. Естественно, при приходе этой команды вызывается слот slotReadClient(). В нем происходит прием команды, далее к команде добавляется "\r" и она передается оборудованию, который висит на COM-порту (с помощью метода temp_com->writeToPort(...)). Когда COM-порт получает эту команду, он передает ее оборудованию, и оно отвечает также на COM-порт. Необходимо этот ответ словить и выдать обратно на сокет clientSocket, чтобы приложение, которое послало команду, получило ответ. Естественно, сразу после строчки Код: temp_com->writeToPort(str2); Код: sendToClient(clientSocket, temp_com->getQba()); Поэтому я сделал решил попробовать сделать так: Код: void ServerSocket::slotReadClient() И в слоте slotSendToClient() Код: void ServerSocket::slotSendToClient() Т.е. идея ясна: сделать небольшую задержку, которая позволит отработать COM-порту, и только потом выслать ответ на сокет (это по сути должно обеспечить то, что ответ будет не пустой). НО! При вызове Код: sendToClient(clientSocket, temp_com->getQba()); Код: slotSendToClient() Название: Re: Необработанное исключение при отправке ответа через сокет Отправлено: niklep от Апрель 26, 2011, 23:28 При оформлении темы в код слота slotReadClient() закралась ошибка в виде лишней закрывающей скобки, не обращайте внимания.
Название: Re: Необработанное исключение при отправке ответа через сокет Отправлено: Ubuntu_linux от Апрель 27, 2011, 00:35 Может не по таймеру ждать, а ловить сигнал ReadyRead() c COM порта? Так будет более правильно.
Название: Re: Необработанное исключение при отправке ответа через сокет Отправлено: niklep от Апрель 27, 2011, 12:55 Действительно, ночь не лучшая пора для генерации идей=) Переделал код, теперь таймера нет. Ловлю сигнал от порта. Примерно так:
Код: мoid ServerSocket::slotReadClient() Код: void ServerSocket::slotReadCom() Код: QByteArray ComHandler::readFromPort() Код: void ComHandler::writeToPort(const char *str) И опять при отправке данных через Код: sendToClient(clientSocket, qba); Название: Re: Необработанное исключение при отправке ответа через сокет Отправлено: niklep от Апрель 29, 2011, 08:28 Проблема решилась. Учитывая, что у меня clientSocket прописан как поле в классе, необходимо было его инициализировать иначе. Я делал:
Код: QTcpSocket* clientSocket = (QTcpSocket*)sender(); Код: clientSocket = (QTcpSocket*)sender(); |