【关于封装qtcpsocket类的问题???】

大树学长 2017-10-11 03:48:03
功能:主类中调用封装类,能够发送数据。

封装类大致代码
h:
public:
QTcpSocket *socket;
public:
void A();//连接
void B();//发生数据

cpp:
A()
{
socket = new QTcpSocket();//出错位置
socket->abort();
socket->connectToHost(IP地址, 端口);
if(!socket->waitForConnected(1000))
{
//没有成功
return;
}
//成功
}

B()
{
socket->write(QObject::tr("数据").toLatin1());
socket->flush();
}

最后在主类中使用信号和槽来调用A、B函数会出错,错误原因是内存泄漏。
各位大神帮忙指点一下,A和B不能合在一起,因为发生的数据类型很多,封装类可能有很多和B差不多的函数。
...全文
731 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
萧洛 2017-10-12
  • 打赏
  • 举报
回复
不管是连接还是发送数据Socket必须先new出来,所以可以把new QTcpSocket放在构造函数中。或者你保证发送信号执行操作前,你已经把Socket给new出来了。 比如你可以写一个create()函数,包含new QTcpSocket以及其它一些初始化,然后在主程序中先调用这个create()函数。 ip地址和端口你可以做为A()函数的参数传入,外面可以直接调A()函数或者发带参数的信号。 本机IP可以自动获取,连接对端的IP肯定先确认。
Acuity. 2017-10-12
  • 打赏
  • 举报
回复
网络层的数据通过IP地址识别,用户应用数据通过端口号识别,客户端端口号一般让系统自动选择成即。
大树学长 2017-10-11
  • 打赏
  • 举报
回复
上面问题已经解决了, 新问题:关于封装类这块的IP地址和端口号,是手动输入还是自动寻找?自动寻找IP地址和端口这个功能实现起来难不难?是否存在BUG,比如有多台机时,怎么识别那一台是自己需要的?
大树学长 2017-10-11
  • 打赏
  • 举报
回复
如果将QTcpSocket *socket;放在A()中,就没有问题,可以使用,但是因为需要发送的数据有很多,所以还是不能用局部变量

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧