0
글쎄, 여전히 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
그들은 ....
[편집] auto conn = connection(...)
write
기능 직후 해고 do
'if (clientConnection-> bytesAvailable() <(int) sizeof (quint16))''이 체크는 비명 성으로 보입니다. 그것을 제거하고, 무슨 일이 일어나는 지보십시오. –
적어도 하나의 바이트가 읽을 수 있는지 확인합니다. 디버깅을 위해 제거했지만 아무것도 변경되지 않습니다. 여전히 읽을 게 없다. –
클라이언트가 연결 신호를 받고 즉시 서버에 데이터를 보내는 것 같습니다. 클라이언트 - 서버 코드를 작성할 때마다 항상 클라이언트를 연결 한 다음 연결시 서버가 'ok'데이터 패킷을 보냅니다. 클라이언트가 'ok'를 받으면 서버에 요청을 진행합니다. 나는 데이터를 보내는 클라이언트가 서버의 readyRead()에 의해 놓친 원인인지 궁금하다. – TheDarkKnight