问题标签 [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 投票
2 回答
879 浏览

qt - 如何正确确定 QTCPSocket 中的输入结束?

我有以下从 QTCPSocket 读取的代码:

这段代码的问题在于它读取了所有输入,然后在最后暂停了 30 秒。(这是默认超时。)

什么是避免长时间超时并检测到输入已经到达末尾的正确方法?(避免信号的答案是首选,因为这应该在线程中同步发生。)

0 投票
3 回答
5374 浏览

xml - 使用 Qt 通过 TCP 套接字部分发送 xml 消息

我们正在编写一个项目,其中有一个客户端生成 xml 请求,将它们发送到服务器,服务器解析请求并以 xml 字符串返回请求的信息。

当 xml 回复很小时,应用程序可以正常工作,但是当它们超过大约 2500 个字符时,它们有时会在客户端被截断。我有时会说,因为当客户端和服务器在同一台机器上运行并通过家庭地址 127.0.0.1 进行通信时,回复被解析得很好。但是,当客户端和服务器在不同的机器上并通过局域网进行通信时,客户端会将消息削减到大约 2500 个字符。

通信由 tcp 套接字完成。我们正在使用 Qt,客户端有一个 qTCPsocket,服务器有一个 qTCPserver 和一个指向 qtcpsocket 的指针。

我们认为解决我们的问题的一个可能的解决方案是发送 xml,按字符数或标签分隔。虽然我们很容易将消息分成几部分,但发送这些部分并让客户端或服务器读取并将这些部分编译成一个 xml 请求会给我们带来麻烦。

例如,我们想测试让客户端分多个部分发送请求。

这是我们发送请求的客户端函数调用。xmlReq 在 else where 生成并传入。作为将消息分成几部分的示例,我们从 xml 请求中去掉结束标记,然后稍后将其作为另一部分发送。

接下来是我们的服务器代码。它是这样写的,它应该从客户端读取消息,直到它看到 xml 关闭消息标记,然后处理数据并将回复发送回客户端。

这是启动服务器的代码。

当它获得一个新连接时,它会调用 acceptConnection 插槽,如下所示

startRead 看起来像这样:

在我看来,开始读取的编码方式是,只要客户端写入消息,服务器就会读取它并将其附加到服务器存储的 xmlRequest 中。如果消息包含 xml 结束标记,则它处理请求。

但发生的情况是,如果客户端连续写入,服务器不会全部读取它们,只会读取第一个,并且永远不会收到 xml 结束标记,因此不处理任何请求。

我需要回答的问题是为什么服务器不响应客户端多次写入?我应该怎么做才能发送一个 xml 字符串,分成几部分,让服务器读取所有部分并再次将其转换为一个字符串?

0 投票
1 回答
1012 浏览

qt - 将 QLocalSocket* 传递给需要 QIODevice* 的方法

也许我过于雄心勃勃,但我正在尝试编写一个服务器程序,它可以接受 QLocalSockets 和 QTcpSockets 上的连接。这个概念是有一个“nexus”对象,同时有一个 QLocalServer 和 QTcpServer 监听新连接:

...然后分开建立服务器对象的插槽,其构造函数采用指向 QIODevice 的指针。理论上,这应该可以工作,因为 QLocalSocket 和 QTcpSocket 都继承了 QIODevice。这是 newLocalConnection 插槽,例如:

问题是这不会编译,给出一个错误:

错误 C2664:“CalculationServer::CalculationServer(QIODevice *,QObject *)”:无法将参数 1 从“QLocalSocket *”转换为“QIODevice *”1> 指向的类型不相关;转换需要 reinterpret_cast、C-style cast 或 function-style cast

现在指向的类型显然不是无关的,在我的代码的其他地方,我对以下操作完全没有问题:

...所以谁能告诉我为什么编译器有这个问题?有没有办法让构造函数接受 QLocalServer*?我想有一个核选项让构造函数接受一个 void 指针和一个额外的变量来告诉它它正在发送什么,因此它可以将 void 指针重新转换为 QLocalSocket 或 QTcpSocket,但我觉得诉诸 reinterpret_cast 感到不舒服看起来它应该是一个简单的 C++ 多态性。

问候,

斯蒂芬。

0 投票
1 回答
5523 浏览

qt - Behavior of QTcpSocket::waitForBytesWritten?

I'm a little confused on the behavior of QTcpSocket::waitForBytesWritten()...

Until when does this function block?

  • Until the data is written to the OS's internal buffer for transmission over TCP?
  • Until the data is physically converted to TCP packets and sent?
  • Until the entire data is transmitted and the remote client acknowledges that all packets have been received?

I looked at the documentation, but it didn't seem to be very clear.

0 投票
1 回答
1204 浏览

c++ - QTcpServer:向连接的客户端发送 HTTP/1.0 200 OK

我设置了一个 QTcpServer 来监听 Shoutcast 流。newConnection() 信号被触发,因为它应该:

如何发送 HTTP 200 ?

0 投票
1 回答
1371 浏览

c++ - QTcpSocket 监听

是否可以在 QTcpSocket 上监听?我在 Tcp 上有一个简单的 p2p 连接。但我找不到在随机空闲端口上启动 QTcpSocket 的方法。我应该为它使用 QTcpServer,还是只对 1 个连接有点过分?

0 投票
1 回答
2847 浏览

qt - QTcpSocket 和发送二进制数据的问题

有以下代码:

在服务器上,我只收到 .bmp 文件的标题。什么可能导致这种行为?以及如何解决这个问题?

0 投票
1 回答
3255 浏览

qt - QTcpSocket 问题

使用 Qt 编写聊天。有问题。我客户端的 QTcpSocket 仍然处于连接状态,但服务器发出 newConnection() 信号。不需要网络会话。这是为什么?这是一些代码:

requestForID() 永远不会被执行

服务器显示传入连接,客户端不发出连接保持在连接状态,也没有收到服务器消息......有什么想法吗?

0 投票
1 回答
1479 浏览

qt - QTcpServer - QTcpSocket 确认问题

-->我正在使用QTcpSocket,QTcpServer编写程序。我是否需要添加一些代码(即确认程序)来保证数据包被传递?
如果是这种情况,我在网上找不到类似的东西,因此想看看一些例子,拜托。

--> 或者在某个地方的 QT 库中,这些已经被覆盖,所以我不需要这样的东西?

任何帮助将不胜感激。谢谢。

编辑:现在,我在问如何将标题与我在下面添加的 QDataStream 块一起使用。我希望每个块都有标题来告诉信息。这样我就可以跟踪写了哪些部分,哪些部分丢失了。请看下面。

0 投票
4 回答
6503 浏览

qt - 如何通过 QTcpSocket 发送整数?

我是 Qt 的新手,所以如果这是一个完全愚蠢的问题......

我正在尝试使用 QTcpSocket。

如果我做:

它抱怨 write() 不适用于整数(不是 const char *)。

如果我做:

另一方将其视为整数 49(ASCII 表示 1)。

在类似但不同的问题上,是否可以通过 QTcpSocket 发送结构或联合?

====================================================

编辑

服务器已经接受整数,并且期待一个整数 - 我无法控制它。