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