问题标签 [qtcpserver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
847 浏览

c++ - QThread 中的 QTcpSocket 将 commitTransaction,但是当调用 Write 时“无法为位于不同线程中的父级创建子级”。

免责声明:我对 Qt 和任何围绕线程和网络的编程都比较陌生。我还采用了很多来自 Qt 示例、API 和其他在线示例的代码。

所有代码都可以在 GitHub 上找到。这段代码相对简单,因为它可以减去剥离 GUI。我认为以这种方式提供它也会有所帮助,而不是仅仅粘贴下面的代码。

我想使用并相信我需要使用线程,因为我需要多个客户端向服务器发送请求,服务器运行一些 SQL 代码,然后将结果吐回客户端(基本上派生一个 MySQL 服务器,但具体到什么我在做)。不过现在,我只是在努力学习这一切的运作方式。

话虽如此,正如标题所述。我的客户端可以连接到服务器,服务器设置线程,并将通过 readReady 接收数据(字符串)。读入数据后,现在我只是想将其回显给客户端。它会这样做,但只有一次。然后它吐出:

除非我让客户端重新连接,否则我无法向服务器发送任何进一步的数据,然后在发送数据后,它将完成其工作,但随后会吐出相同的错误并停止运行。我尝试了很多不同的东西,但似乎无法解决问题。我什至尝试按照 API 中的建议为此设置一个 SIGNAL/SLOT:

重要的是要记住 QThread 实例存在于实例化它的旧线程中,而不是调用 run() 的新线程中。这意味着 QThread 的所有排队槽都将在旧线程中执行。因此,希望在新线程中调用槽的开发人员必须使用工作对象方法;不应将新插槽直接实现到子类 QThread 中。

无论如何,任何帮助将不胜感激!我的代码如下..

服务器

服务器线程.cpp

因此,ServerThread.cpp在调用 echoData 时,即出现错误并且 Socket 停止运行。

任何和所有的帮助将不胜感激。我知道还有一些关于线程的“不能为...创建孩子”的其他帖子。但我没有发现其中任何一个有帮助。我确实觉得有趣但不理解的一件事可能是使用 moveToThread() 但对此有很多不同的评论。

我最好通过代码示例和解释来学习,而不是仅仅通过解释或指向 API 的指针。谢谢!

0 投票
1 回答
8254 浏览

python - PyQt5:在客户端和服务器之间发送和接收消息

我正在尝试创建一个服务器和客户端来发送和接收消息。我的问题是在客户端和服务器之间发送和接收。

客户端.py

服务器.py

我已经搜索过,但我很困惑。我找到了一些代码,但我不明白它到底做了什么:

0 投票
0 回答
721 浏览

multithreading - Qt - 如何将 QTCPSocket 添加到 QTCPServer 的挂起连接

我有一个简单的多线程应用程序,其工作方式类似于 Qt 网站上的示例 “Threaded Fortune Server Example”

当我的QTCPServer接收到传入连接时,我创建一个QRunnable任务,传递socketDescriptor然后将其提交给QThreadPool

然后在 Task 方法中run()创建套接字:

但是,我 从 Qt Doc中阅读了关于QTCPServer的incomingConnection方法的那些注释

注意:如果在重新实现此方法时创建了另一个套接字,则需要通过调用 addPendingConnection() 将其添加到 Pending Connections 机制中。

注意:如果您想在另一个线程中将传入连接作为新的 QTcpSocket 对象处理,您必须将 socketDescriptor 传递给另一个线程并在那里创建 QTcpSocket 对象并使用其 setSocketDescriptor() 方法。

所以,我的问题是:

  • 如何将另一个线程创建的套接字添加到服务器的挂起连接?
  • 这是一个必要的操作吗?

谢谢,

0 投票
1 回答
2010 浏览

qt - QTcpSocket 连接导致 UnknownSocketError 错误字符串“UnknownError”

问题

我无法获得有关此错误的任何进一步信息:

QT QAbstractSocket::SocketError仅提供了发生某些错误的基本解释

发生不明错误。

枚举值 = -1

调用 QTcpSocket::errorString() 可以提供:

SO上有一个关于此的问题,但没有提供解决问题的真正解决方案(以及我所做的建议)

我完全不知道如何进一步处理这个错误,因为每次我的客户端尝试连接(在调用connectToHost()之后)我都会收到这个错误。

代码:

//服务器

我还继续明确地将服务器 ip 设置为 localhost 和端口 5000,但没有成功。

//客户

客户端调试输出:

有什么建议吗?

ps 我找了一些堆栈跟踪/回溯选项,没有找到任何东西 - 如果有,请发表评论

0 投票
1 回答
1313 浏览

c++ - 写入 QTcpSocket 并不总是在相反的 QTcpSocket 上发出 readyRead 信号

在过去的 5 天里,我一直坚持这一点,我知道如何继续。

概述:

我有一个与图书馆client UI交互的data handler图书馆,data handler图书馆利用network manager图书馆,这是我的问题所在。

更多信息

QTcpServer首先,QT 为(Fortune Server)和QTcpSocketFortune Client )之间的交互提供了一个基本示例。

因此,我将这段代码实现为我自己的一个非常基本的示例,它就像一个魅力,没有任何问题。

我自己改编的财富客户端服务器备案(基础)

快速说明:

服务器应用程序运行,点击start server,然后在客户端,在字段中输入文本并点击connect to server显示文本,简单!

问题:

将上面的代码实现到我的network manager库中,不会触发QTcpSocket::readyRead()上面的服务器应用程序。

它连接到serverQTcpServer::newConnection()正如预期的那样被触发,之后立即client写入套接字但readyRead()服务器套接字上的 不会触发,但是在给出的示例中它会触发。

注意:在这个应用示例和我当前的应用中使用的和相同,并且服务器也在port运行 。ip addressserver-client

更多信息:

从上面的代码中,我直接从客户端复制过来。只有两件事被改变/修改:

  • 发送到服务器的字符串
  • 方法的返回类型

这被复制到我的network mannager ::write()方法中。运行我的应用程序时,实例QMainWindow通过data handler类传递并创建我的network manager类的实例,该实例继承QObject并实现Q_OBJECT宏。

代码示例:

//client_UI类(片段):

//data_manager库(片段)

//netman库(片段)

//cpp

结论:

客户端的核心代码已经完全实现了,但是我不明白为什么会出现这个错误。

我将非常感谢帮助/建议!

0 投票
2 回答
2354 浏览

c++ - 从 Qt 5.7 切换到 Qt 5.8 - “代理类型对此操作无效”

我正在尝试使用 Qt 5.8 重新编译与 Qt 5.7 配合良好的网络应用程序。但是,使用 Qt 5.8,服务器无法listen()

并且返回的错误是:

此操作的代理类型无效

我确实在受代理保护的公司网络上运行该应用程序,但是在以前的 Qt 版本中,从来不需要进行任何类型的设置来解决这个问题。我以前从未见过listen()命令失败。

Qt 5.8 中发生了什么变化或如何解释这一点的任何想法?

编辑:

在整个网络被代理的情况下,在本地域上通信不需要代理,并且设置NO_PROXY环境变量以避免代理本地连接。

0 投票
1 回答
490 浏览

c++ - 我可以在不同的网络中连接两个 QTcpSocket 吗?

我可以仅在本地计算机之间连接还是可以连接到另一个网络?

0 投票
3 回答
1774 浏览

c++ - QTcpSocket::readAll() 为空

我是 Qt 新手,有点挣扎。我正在尝试使用 QTcpSocket 将字符串从客户端发送到服务器。

客户端:

服务器端:

在服务器端程序readyRead()在接收到数据时进入,但是块为空,虽然在客户端tSock->write(block)调用时块不为空......似乎是哪里的问题?我将不胜感激任何帮助。谢谢!

0 投票
1 回答
88 浏览

c++ - QtcpServer:Qt如何获取python字符串来标记

大家好,我使用 python 向 qt 发送字符串,但我不知道如何在标签上显示字符串,谁能帮助我???我的 mainwindow.cpp 是

每次我尝试放置 socket->readall() 时它都会在我调试时崩溃

0 投票
1 回答
597 浏览

c++ - QTcpServer 应用程序中 Qt C++ 中的插槽和信号

QTcpServer 应用程序中有一个关于 Qt C++ 中的槽和信号的问题。我对插槽和信号方法不是很熟悉。所以......问题是服务器应用程序上的客户端套接字插槽根本没有被调用。我认为我使用了错误参数的连接函数。

我在这里使用连接功能:

...但是这些连接功能无法正常工作。客户端正在连接,onNewConnection 被调用,但来自客户端套接字的事件(插槽)不会出现(readyRead() 等)。服务器能够向客户端发送消息。谢谢。