QTcpSocket同步读取

QTcpSocket同步读取,第1张

QTimer timer;

timersetSingleShot(true);

QEventLoop loop;

loopconnect(socket, SIGNAL(readyRead()), SLOT(quit()));

connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));

while (resultBytessize() < count)

{

timerstart(msTimeout);

loopexec();

}

F libc : Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x8 in tid 18493 (QThread), pid 18454 (projectexample)

或者是

ASSERT: “m_buf” in file

这两个错误

是因为socket 在write的时候, 调用线程和socket创建的线程不一致产生的崩溃

有两种情况

在其他线程调用了write函数,需要通过信号跳转到socket创建的线程调用write(connect信号时添加Qt::QueuedConnection参数),例如:

QObject::connect(this, static_cast<void (Socket::)(const QByteArray &)>(&Socket::write),

this, [=](const QByteArray &byte){

if( socket->state() == QTcpSocket::ConnectedState ) {

socket->write(bytedata(), bytesize());

}

}, Qt::QueuedConnection);

复制

处理socket的disconnected信号重连时,QObject::connect需要添加Qt::QueuedConnection 参数

QObject::connect(socket, &QTcpSocket::disconnected, this, [=](){

socket->disconnectFromHost();

qDebug() << "socket disconnect";

int time = 0;

socket->connectToHost(deviceIP, cfgport);

while (!socket->waitForConnected(50) && !exit && (time < 20)) {

socket->connectToHost(cfgip, cfgport);

time ++;

}

if( socket->state() != QAbstractSocket::ConnectedState ) {

qDebug() << "socket reconnect fail";

}

else {

qDebug() << "socket reconnect success";

}

}, Qt::QueuedConnection);

复制

QTcpSocket QTcpServer::nextPendingConnection ()

QHostAddress QAbstractSocket::peerAddress ()

if(m_>

TCP(Transmission Control Protocol)即传输控制协议,是计算机网络中运输层最重要的协议之一。而socket接口是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,或者说是一个API,应用程序接口函数。

socket的大致流程:服务器端先初始化socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束

以上就是关于QTcpSocket同步读取全部的内容,包括:QTcpSocket同步读取、qttcpsocketpeerport端口不对、使用QT编写的TCP服务程序,怎么获取连接的客户端IP地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9609490.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存