ну, я все еще пытаюсь заставить 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(...)
был для отладки, чтобы проверить, правильно ли они подключаются …. они делают
Примечание: вы должны действительно проверить возвращаемое значение waitForConnected (). Нет смысла продолжать, если клиенту не удается подключиться к серверу.
Но я думаю, что ваша настоящая проблема в том, что вы пишете простую 8-битную строку типа «hallo welt \ 0», но вы читаете с QDataStream, который ожидает двоичный формат (для QString это означает Unicode и длину в первую очередь), это не соответствует
Других решений пока нет …