【发布时间】:2010-01-25 07:10:15
【问题描述】:
情况: 我有用 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 做什么:)
【问题讨论】:
-
您的客户端代码看起来不错(除了缩进混乱)。你可以发布你的服务器端吗?如果您尝试使用相同的客户端从 Web 上的随机 http 服务器获取某些内容,它就可以正常工作。另外,QT 与这整件事有什么关系?那是一个 GUI 工具包。
-
@Ibrahim - Qt 不是 GUI 工具包。它是一个应用程序框架。
-
啊,好吧。谢谢。但是,如果没有服务器端代码,我认为这是不可调试的。
-
肯定需要服务端代码提供有用的建议。
标签: python debugging qt sockets tcp