gpt4 book ai didi

python - Qt:Python tcp 客户端通过套接字发送数据。 Qt如何读取这些字节?

转载 作者:可可西里 更新时间:2023-11-01 02:53:05 25 4
gpt4 key购买 nike

情况:我有用 Python 制作的 tcp 客户端和用 Qt 制作的 tcp 服务器。我尝试用我的客户端发送字节,但我无法让 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()));

更新:

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 做什么:)

最佳答案

您需要安排代码在有可用数据时读取。根据您的描述,startRead() 运行时还没有可用数据。

我假设您调用了 QTcpServer::nextPendingConnection 以在 startRead() 中获取您的 tcpSocket?如果没有,您需要这样做。

只需将 tcpSocketclientreadyRead 信号连接到 doRead() 插槽,然后检查bytesAvailable() 并读取该插槽。

只要有新数据到达,就会调用这个插槽。

您可能还对来自 TCP 套接字的 disconnected() 信号感兴趣,以了解它何时完成发送数据。

关于python - Qt:Python tcp 客户端通过套接字发送数据。 Qt如何读取这些字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2130757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com