QLocalSocket ничего не отправляет

ну, я все еще пытаюсь заставить IPC работать через QLocalSocket.
Очевидно, мой сокет соединяется, соединение принимается, но когда я пытаюсь что-то отправить

void ServiceConnector::send_MessageToServer(QString message) {

if(!connected){
m_socket->connectToServer(m_serverName);
m_socket->waitForConnected();

}

char str[] = {"hallo welt\0"};
int c = m_socket->write(str,strlen(str));
qDebug() << "written: " << c;
}

я не получаю ответа … сокет сервера просто ничего не делает.

реализация чтения сервером:

void ClientHandler::socket_new_connection() {

logToFile("incoming connection");

clientConnection = m_server->nextPendingConnection();

socket_StateChanged(clientConnection->state());

auto conn = connect(clientConnection, SIGNAL(disconnected()),this, SLOT(socket_disconnected()));
conn = connect(clientConnection, SIGNAL(stateChanged(QLocalSocket::LocalSocketState)),this,SLOT(socket_StateChanged(QLocalSocket::LocalSocketState)));
conn = connect(clientConnection, SIGNAL(readyRead()), this, SLOT(socket_readReady()));

clientConnection->waitForReadyRead();
socket_readReady();
}
void ClientHandler::socket_readReady(){
logToFile("socket is ready to be read");

logToFile((clientConnection->isOpen())? "open: true":"open: false");
logToFile((clientConnection->isReadable())? "readable: true":"readable: false");

QDataStream in(clientConnection);
in.setVersion(QDataStream::Qt_4_0);
if (clientConnection->bytesAvailable() < (int)sizeof(quint16)) {
return;
}

QString message;
in >> message;

logToFile("Message recieved" + message);

send(message);
emit messageReceived(message);
}

выходы:

клиент:

[Debug]: ConnectingState
[Debug]: ConnectedState
[Debug]: socket_connected
[Debug]: written:  10

сервер:

[Debug]: incoming connection
[Debug]: socket is ready to be read
[Debug]: open: true
[Debug]: readable: true

сигнал сокета readReady () никогда не излучается, поэтому я решил использовать

clientConnection->waitForReadyRead();
socket_readReady();

…но очевидно, что это тоже не работает. waitForReadyRead уволен сразу после write Функция клиента, которая, я думаю, означает, что она теперь готова к чтению …

[редактировать] auto conn = connection(...) был для отладки, чтобы проверить, правильно ли они подключаются …. они делают

0

Решение

Примечание: вы должны действительно проверить возвращаемое значение waitForConnected (). Нет смысла продолжать, если клиенту не удается подключиться к серверу.

Но я думаю, что ваша настоящая проблема в том, что вы пишете простую 8-битную строку типа «hallo welt \ 0», но вы читаете с QDataStream, который ожидает двоичный формат (для QString это означает Unicode и длину в первую очередь), это не соответствует

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]