问题标签 [qtcpsocket]

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 投票
0 回答
409 浏览

c++ - QTcpSocket::connectToHost() 在 Windows XP 上崩溃

我制作了一个将 QTcpSocket 连接到 QTcpServer 的程序,它在 windows 7 上运行良好,但在 windows xp 上它永远不会连接并且程序只是关闭

在 windows xp 上,它永远不会超过第一行。套接字状态从 0 变为 1 再变为 2(套接字已开始建立连接)然后关闭。尝试允许端口 1234 通过防火墙或完全禁用防火墙,但它仍然崩溃。

有人知道如何解决这个问题吗?

0 投票
3 回答
18318 浏览

c++ - 使用 QDataStream 从 QTcpSocket 读取

我需要通过QTcpSocket. 我在考虑使用QDataStream,但遇到了一个问题 - 如果在我尝试阅读时没有数据到达,它会静默失败。

例如,如果我有以下代码:

如果套接字中当前没有数据,它将静默失败。有没有办法告诉它阻止?

0 投票
0 回答
1945 浏览

qt - QTcpSocket - 连接被拒绝,直到端口更改

抱歉,我不知道如何为这个问题提供一个简洁的标题。

背景:我正在使用 QTcpSocket 连接到 PLC 模拟器应用程序。以前我使用PLCQTLIB连接到模拟器,一切正常。该库没有为我的项目提供足够的功能,因此我创建了自己的库来连接 Qt 和libnodave库。

模拟器在 IP 地址 192.168.32.1 和端口 102 上运行

当前问题:我输入 IP (192.168.32.1) 和端口 (102) 并按连接。我收到:

TCP 错误 = QAbstractSocket::ConnectionRefusedError

TCP 错误 = QAbstractSocket::SocketTimeoutError

如果我将端口更改为 80 并按连接,则连接成功。但是,与 PLC 模拟器的连接将失败,因为它没有在端口 80 上侦听。

现在已经与 192.168.32.1 建立了成功的连接,并且当前的连接状态是disconnected,我可以进入正确的 102 端口,连接成功。

问题:为什么 TCP Socket 直到之前在端口 80 上打开了一个连接之后才建立到端口 102 的连接?不存在防火墙,所有通信都在本地计算机上进行。

在标题中声明:

QTcpSocket *tcp;

源文件:

0 投票
1 回答
2887 浏览

qt - QObject::connect 在 QRunnable - 控制台

我创建简单的多线程服务器:

  • 创建服务器
  • 如果新连接创建新的 QThreadpool - QRunnable
  • 在可运行向客户端发送消息并等待请求
  • 如果客户端已断开连接,runnable 写入 qDebug 并 runnable 退出。

服务器.h

服务器.cpp:

可运行的.h

可运行的.cpp

!!!怎么弄的???!!!QObgect::connect(newSocketCon, SIGNAL(disconnected()), this, SLOTS(disconnectCln()));

0 投票
3 回答
2857 浏览

c++ - 为什么客户端不连接到服务器?Qt

程序工作,但客户端无法连接到服务器。(我运行 2 个程序示例:客户端和服务器)。我找不到我的错误在哪里。

我写了下面的代码。如果你看一下 main 函数,你会看到我想要做什么。





请帮帮我!

0 投票
1 回答
1121 浏览

qt - QTcpServer -- 如何停止客户端线程

我的 gui 有两个按钮,一个用于启动服务器,另一个用于停止服务器。

Brief:---
一旦服务器启动,在每个新的客户端请求上,我都会创建一个新线程,这将处理与客户端的通信。

Detail:--按下
start button,我正在创建一个对象“ tcpserverobjectWrapper”,该对象创建另一个对象“ tcpserverobject”,此对象创建一个 Qtcpserver。现在这个 Qtcpserver 正在列出新的连接。当一个新的连接到来时,我创建一个' TcpSocketThreadWrapperObject'对象,它创建一个线程&这个线程处理与客户端的通信。' tcpserverobject' 还保留了创建的新客户端请求对象的列表 ' QList<TcpSocketThreadWrapperObject *> TcpSocketThreadWrapperObjectList;' 。

我能够从 telnet 客户端连接到服务器,它为每个客户端创建新线程并且工作正常。

stop button按下时,我能够停止服务器和客户端线程。

但我在two problems这里:---
1> 每次客户端向服务器发送一些数据。我得到这种QsocketNotifier. 这是什么 ?

2> 如果我按下 GUI 上的停止按钮,我可以成功停止线程。

STOP command但是,当客户端将“ ”发送到服务器或使用服务器时,如何停止线程并删除为每个客户端创建的对象closes the connection
我还必须删除在每个客户端请求上创建的以下对象?
客户端请求 --> TcpSocketThreadWrapperObject -- 创建 --> TcpSocketThreadObject -- 创建 --> TcpSocketThreadObject

有人可以建议如何解决上述两个问题吗?对此的回复将不胜感激。

这是代码:---

================= 开始和停止按钮处理程序 =====

======== tcpserverobjectWrapper 类 ================

========== tcpserverobject 对象 ==================

============ TcpSocketThreadWrapperObject ==============

======== TcpSocketThreadObject 对象 ========

======= 一个连接到服务器的客户端的输出 =====

0 投票
1 回答
749 浏览

qt - QSocketNotifier 警告——在线程中使用套接字

我可以删除此警告,请在以下几点提出建议。

每当新请求来到 QTcpServer 时,我都会创建新对象—— xxx。然后该对象为此套接字创建线程并在 yyy 对象的 dowork_socket() 函数中发送接收数据。在 dowork_socket() 函数中,我发出信号 signalTcpSocketWriteData() 以从套接字发送数据。

为新套接字创建线程的对象- xxx(我没有粘贴完整代码):----

移动线程的对象—— yyy(我没有粘贴完整的代码):----

在上面的对象 yyy 构造函数中,我将信号 signalTcpSocketWriteData 连接到插槽 writeDataSlot :---

对象yyy的dowork函数:--

我可以通过上述方法完全成功发送数据并且上述警告已被删除。

1>现在我的问题是假设创建了两个线程并且两个线程同时发出信号,那么运行插槽会不会发生冲突?
2>它会导致一些关键部分问题或事件排队并且不会同时执行吗?

请就这两点提出建议。

0 投票
1 回答
1038 浏览

c++ - Qt5 QTcpSocket 派生类和QTcpServer

我正在开发一个有意义的应用程序,我将我的类包装在已实现的 QTcpSocket 周围(因为它是一个 TCP 协议,我需要能够尽可能无缝地使用原始套接字和添加的功能)。

因此,为了简单起见,我的代码结构如下:

对于 QTcpServer,默认的 nextPendingConnection() 函数返回一个 QTcpSocket 实例,我无法将其转换为 MyTCPSocket(据我所知,QTcpSocket 没有复制结构)。

我最好的选择是什么?我在想我可以创建一个新的 MyTCPSocket 并将套接字描述符设置为 MyTCPServer 的 nextPendingConnection() 返回的描述符,但我不确定当旧的套接字被删除时它会如何工作。

有没有更好的方法来处理这种情况?

0 投票
4 回答
20331 浏览

c++ - How to read complete data in QTcpSocket?

Now the server (implemented with java) will send some stream data to me, my code is like below:

in the read_from_server():

but I find that even the server sent me a string with only several characters, the data is truncated, and my function is called twice, thus temp is the never complete data that I want.
If server send me a longer string, my function may be called three or more times, making me diffficult to know at which time the data is transfered completely.
So anyone can tell me how to completely receive the data easily, without so many steps of bothering? I'm sorry if this is duplicated with some questions else, I couldn't get their answers work for me. Many thanks!

0 投票
0 回答
221 浏览

qt - 如何测量 QTcpSocket 丢包率

有没有办法检索数据包丢失或在这种情况下在 QTcpSocket 上发生的重新传输?如果有办法,是否还有办法检查发送的数据包总量与重传量?