Положение:
У меня есть tcp клиент с Python и tcp сервер с Qt. Я пытаюсь отправить байты с моим клиентом, но не могу заставить сервер Qt прочитать эти байты.
Используя Python, сделанный клиентом и сервером, все работает отлично. Также я могу без проблем заставить мой клиент Python работать с C # сервером.
Код для клиента Python:
import socket
import sys
HOST = 'localhost'
PORT = 50505
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error as msg:
sys.stderr.write("[ERROR] %s\n" % msg)
sys.exit(1)
try:
sock.connect((HOST, PORT))
except socket.error as msg:
sys.stderr.write("[ERROR] %s\n" % msg)
sys.exit(2)
sock.send(b'Hello World!\r\n')
Я пробовал примеры кода e.q fortuneserver / fortuneclient, но они не работали. Bytesavailable () всегда равно 0.
Итак, вопрос в том, как я могу прочитать в своем приложении Qt "Hello World!" линия ? Мне просто нужна эта функция, которая запускается, когда сервер испускает сигнал newConnection ().
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(startRead()));
UPDATE:
Часть кода для сервера Qt:
void Server::startRead()
{
QDataStream in(tcpSocket);
in.setVersion(QDataStream::Qt_4_0);
QString ipAddress;
if (blockSize == 0) {
if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))
return;
in >> blockSize;
}
if (tcpSocket->bytesAvailable() < blockSize)
return;
QString nextFortune;
in >> nextFortune;
statusLabel->setText(nextFortune);
ABOVE IS FROM FORTUNE CLIENT EXAMPLE.
BELOW IS FROM ANOTHER EXAMPLE.
/*
char buffer[128] = {0};
QTcpSocket *client = tcpServer->nextPendingConnection();
qDebug() << client->bytesAvailable();
for (int i=0; i<100; i++)
{
client->read(buffer, client->bytesAvailable());
qDebug() << buffer;
std::string sString(buffer);
QString qString(sString.c_str());
statusLabel->setText(qString);
}
*/
}
Эта последняя часть довольно плохая. Я пытался что-то сделать, но понятия не имею, что я делаю с Qt:)