首页 > 编程知识 正文

qt实现udp通信,qt实现udp数据发送与接收

时间:2023-05-05 06:31:04 阅读:25524 作者:1197

QTcpSocket类的方法connectToHost会泄漏内存,并且调用此方法的QTcpSocket实例delete掉落不会释放内存! 重复connectToHost会导致段错误,非常危险。 必须控制connectToHost的使用次数!

连接到服务器

m _ TCP套接字- connecttohost (“127.0.0.1”,9877 );

连接=m _ TCP socket-wait for connected (;

QTcpSocket仅在使用waitForConnected ()后才尝试实际连接到服务器,并返回是否连接的结果。

写数据

m _ TCP socket-write (str.tostdstring (.c _ str ),strlen ) str.tostdstring (.c _ str ) );

m _ TCP套接字- waitforbyteswritten (;

QTcpSocket实际上是在使用waitForBytesWritten ()之后发送数据的。

m _ TCP socket-write (str1. tostdstring (.c _ str ),strlen (str1. tostdstring ) );

m _ TCP socket-write (str2. tostdstring (.c _ str ),strlen (str2. tostdstring ) ) )

的结果是发送了str1str2

断开与服务器的连接

m _ TCP套接字- disconnectfromhost (

m _ TCP套接字- wait for disconnected (

善于使用QTcpSocket的SIGNAL:connected ()、disconnected ()、error (qabstractsocket 33603360 socket error ) )。

结合定制专用交换机变量bool connected,QTimer可以实现自动重新连接等逻辑。

QTcpSocket调试经验共享

这很长时间都在写基于TCP的通信程序。 服务器端使用WinCE实现,客户端使用Qt实现。 以前,我写了能够向服务器正确发送数据的VC的客户端。

如果将客户端更改为Qt实现并实现connectToHost () ),则服务器端现在可以正确地访问(),但write ) )之后服务器的read函数将无法响应。 调试失败了很久,火很大啊。 今天试着输出插座的状态,如下所示。

bool TCP客户端:3360新连接(持续时间,quint16 iPort ) )。

{

mock et=newq TCP套接字(this;

套接字连接(iaddr,iPort );

q调试(“状态: % dn”,套接字状态); //State: 2; 2表示连接状态,应该正确地为3 (连接状态)

连接(套接字,信号(就绪读取) )、this、插槽(读取) ); 连接(套接字,信号(已断开) )、this,插槽(断开) ); 返回(真; }

qint 64 TCP客户端:3360 write (constqbytearrayidata ) ) )。

{

qint 64 len=套接字写(idata );

q调试(“状态: % dn”,套接字状态); //State: 2; 2表示连接状态,应该正确地为3 (连接状态)

msleep(200; 返回(len ); }

在输出的状态下,发现了问题的所在。 哎呀! 都是业务不熟悉有害啊。

套接字连接是异步的,因此在连接建立之前不可用。 因此,分别添加waitForConnected ()和waitForBytesWritten () )并通过调试。

bool TCP客户端:3360新连接(持续时间,quint16 iPort ) )。

{

mock et=newq TCP套接字(this;

套接字连接(iaddr,iPort );

q调试(“状态: % dn”,套接字状态); //State: 2; 2表示连接状态,应该正确地为3 (连接状态)

持续时间=5* 1000; if (! 针对连接的消息等待(时间输出) (返回)假; } q调试(状态: % d (n ),套接字状态); //state :3 (连接状态)正确的连接(套接字、信号(就绪读取)、this、插槽(读取) ) )连接(套接字返回(真; }

qint 64 TCP客户端:3360 write (constqbytearrayidata ) ) )。

{

qint 64 len=套接字写(idata );

msocket-waitforbyteswritten (300;

q调试(“状态: % dn”,套接字状态); //state :3 (连接状态)正确

msleep(200; 返回(len ); }

转载来源: http://blog.Sina.com.cn/s/blog _ 4888 f 88101014 euy.html # CMT _ 2022 332

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。