Qt와 C++를 사용하여 간단한 서버를 작성하려고합니다. PHP에QTcpSocket, 들어오는 데이터를 읽을 수 없습니다.
#include "mytcpserver.h"
MyTcpServer::MyTcpServer(QObject *parent) :
QObject(parent)
{
server = new QTcpServer(this);
// whenever a user connects, it will emit signal
connect(server, SIGNAL(newConnection()),
this, SLOT(newConnection()));
if(!server->listen(QHostAddress("127.0.0.1"), 3333))
{
qDebug() << "Server could not start";
}
else
{
qDebug() << "Server started!";
}
}
void MyTcpServer::on_readyRead()
{
QTcpSocket * senderSocket = dynamic_cast<QTcpSocket *>(sender());
if (senderSocket)
{
qDebug() << "reading data";
qDebug() << senderSocket->readAll();
}
}
void MyTcpServer::newConnection()
{
// need to grab the socket
QTcpSocket *sok=new QTcpSocket();
sok = server->nextPendingConnection();
if (sok)
{
connect(sok,SIGNAL(readyRead()),this,SLOT(on_readyRead()));
connect(sok,SIGNAL(disconnected()),sok,SLOT(deleteLater()));
}
sok->write("Writing");
}
클라이언트의 일부 : 다음 코드
$address = "127.0.0.1";
$service_port = "3333";
echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socke$
} else {
echo "OK.\n";
}
$in = "HEAD/HTTP";
$out = '';
echo "Sending HTTP HEAD request...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";
echo "Reading response:\n\n";
while ($out = socket_read($socket, 2048)) {
echo $out;
}
문제는 I는 즉, PHP 클라이언트로부터 판독 readyRead가 방출되지 않는 신호를 할 수 없다는 것이다. 또한 내가 명령 줄에 입력하려고하면 : 텔넷 127.0.0.1 3333 다음 서버는 "쓰기"및 종료 응답합니다.
(). 이제 readyRead 신호가 아무 것도 연결되지 않습니다. nextPendingConnection()에서 소켓을 얻 자마자 연결하십시오. – galinette
nextPendingConnection에서 가져 오는 즉시 들어오는 연결을 닫습니다! 어떻게 데이터를받을 것으로 기대합니까? 그것을 닫지 마십시오! – galinette
on_readyRead()에서 sok이란 무엇입니까? – galinette