在qt里SOCKET通信,太坑爹

 char buffer[100];
    QTcpSocket  *clientConnection =tcpServer->nextPendingConnection() ;
    if( clientConnection->waitForReadyRead() == true) //注意::读取要设成阻塞状态 因为客户端的也是阻塞写
   {
       QMessageBox::warning(NULL,"提示"," 接受信息成功 !",QMessageBox::Yes);   //这句话放错位置,怎个程序都错误
        clientConnection->read(buffer,100);
   }
 
 
 
心太累了, QMessageBox::warning(NULL,"提示"," 接受信息成功 !",QMessageBox::Yes);   这句话放错位置,怎个程序都错误,就会遇到address is already in use ,listen error!
的错误,说明了写程序时,要严谨。

为什么QMessageBox::warning(NULL,"提示"," 接受信息成功 !",QMessageBox::Yes); 会造成读取信息失败呢?

我猜测是因为弹出的对话框,把缓冲区里的信息清除,原因未明白,感兴趣的小伙伴吗,可以去研究一下

除此之外,我运行程序的时候老是有
  
  
 "The bound address is already in use"  listen error!
 tcpServer = new QTcpServer(this);
    if(!tcpServer->listen(QHostAddress::AnyIPv4,9000)) //网络端口//if(!tcpServer->listen(QHostAddress::LocalHost,9000))
        {
        //监听本地主机的9000端口,如果出错就输出错误信息,并关闭
            qDebug() << tcpServer->errorString();
            qDebug()<<" listen error!";        
            close();
       //  exit(0);
        }


我经过调试之后,发现了,socket多次使用,要在if之外,加上close();




    
    
 
 {
 tcpServer = new QTcpServer(this);
    if(!tcpServer->listen(QHostAddress::AnyIPv4,9000)) //网络端口//if(!tcpServer->listen(QHostAddress::LocalHost,9000))
        {
        //监听本地主机的9000端口,如果出错就输出错误信息,并关闭
            qDebug() << tcpServer->errorString();
            qDebug()<<" listen error!";        
            close();
       //  exit(0);
        }
        ……
        ……
        ……
        
        在最后添加: close();
        
}
        
        
        
      
empty





  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值