(Qtcpsocket)退出程序时提示段错误的解决
2010-11-01 17:49
337 查看
这几天使用QT附带的一个example程序fortuneclient,开发了一个tcp通信的小程序,偶然间发现原来的程序存在一个小bug,当填入的ip地址或者端口号错误,关闭程序时,会报段错误,并弹出runtime error出错框。
仔细观察了一下,程序出错时,在QT Creator的application output框里不断的提示
QNativeSocketEngine::write() was not called in QAbstractSocket::ConnectedState
并且错误处理函数displayError,会报两次error,弹出两次出错提示的窗口
然后上网搜了一下,也没有发现明确的解决方法。
再仔细单步跟了一下代码,发现代码中存在这样一个问题:
由于connectToHost函数是一个void型,所以执行完这一步,并不能判断是否真的连到了服务器。我单步执行了一下,发现ip和port填错,程序也会执行到下面的write。没有建好连接,就向socket中写入信息,大概问题就出在这里了。
解决的方法是,将write部分单独做成一个SLOT函数,命名为Login(),然后建立一个信号槽,如下:
当connecttoHost执行成功时,会触发connected信号,然后就会调用Login()函数。这次再试了一下啊,当输入错误ip和port时,程序只会进入displayError一次,并给出相应的提示,也不会执行Login()里的write,再关闭该程序,没有再发生段错误或者runtime error窗口。输入正确的ip和端口号,则能够正确的连接到服务端,并且触发Login()函数
参考:http://www.qtcn.org/bbs/read.php?tid=25464
仔细观察了一下,程序出错时,在QT Creator的application output框里不断的提示
QNativeSocketEngine::write() was not called in QAbstractSocket::ConnectedState
并且错误处理函数displayError,会报两次error,弹出两次出错提示的窗口
然后上网搜了一下,也没有发现明确的解决方法。
再仔细单步跟了一下代码,发现代码中存在这样一个问题:
tcpSocket->connectToHost(hostLineEdit->text(), portLineEdit->text().toInt()); //连接到服务端 ..... if ( (iRet=tcpSocket->write(send_buf))==-1) return false; else return true;
由于connectToHost函数是一个void型,所以执行完这一步,并不能判断是否真的连到了服务器。我单步执行了一下,发现ip和port填错,程序也会执行到下面的write。没有建好连接,就向socket中写入信息,大概问题就出在这里了。
解决的方法是,将write部分单独做成一个SLOT函数,命名为Login(),然后建立一个信号槽,如下:
connect(tcpSocket, SIGNAL(connected()), this, SLOT(Login())); ...... void Login() { if ( (iRet=tcpSocket->write(send_buf))==-1) return false; else return true; }
当connecttoHost执行成功时,会触发connected信号,然后就会调用Login()函数。这次再试了一下啊,当输入错误ip和port时,程序只会进入displayError一次,并给出相应的提示,也不会执行Login()里的write,再关闭该程序,没有再发生段错误或者runtime error窗口。输入正确的ip和端口号,则能够正确的连接到服务端,并且触发Login()函数
参考:http://www.qtcn.org/bbs/read.php?tid=25464
相关文章推荐
- Ubuntu16.0.4LTS 64位上运行32位程序,提示No such file or directory?错误的解决办法
- 解决卸载或者安装程序失败的问题,提示:错误 1402。无法打开键UNKNOWN\Components\xxx
- QT类似于QQ的即时聊天程序用开发QTcpServer,QTcpSocket简单开发
- 解决jdk环境变量设置完后,在cmd中运行javac出现’javac‘不是内部或外部命令,也不是可运行的程序或批处理文件的错误提示
- Android JNI 编译正确 但是提示程序有错误无法运行 而且还看不到任何错误提示 的解决方法
- Windows IIS 调试ASP 错误号:3706 提示 “未找到提供程序 该程序可能未正确安装”解决办法
- Mysql5.7.10版本安装后空密码登录,退出后提示密码错误连接不上解决
- 退出程序时发生错误,大家来看看如何解决
- Windows7下安装Oracle 10g提示“程序异常终止,发生未知错误”的解决方法
- Win7/Win8 系统下安装Oracle 10g 提示“程序异常终止,发生未知错误”的解决方法
- qt程序运行在树莓派错误解决This application failed to start because it could not find or load the Qt platform plu
- 解决卸载或者安装程序失败的问题,提示:错误 1402。无法打开键UNKNOWN\Components\xxx
- 使用wxWidgets编译的Windows Mobile程序运行时提示“SHCreateMenuBar failed”错误的解决方法
- Windows7旗舰版下安装Oracle 10g提示“程序异常终止,发生未知错误”的解决方法
- 关于在运行qt的程序时提示无法定位程序输入点_ZdaPvj于动态链接库Qt5Cored.dll”的解决办法
- QT5 提示:无法启动此程序,计算机丢失Qt5Widgetsd.dll的解决方法
- Ubuntu16.0.4LTS 64位上运行32位程序,提示No such file or directory?错误的解决办法
- QTcpSocket通信乱码解决方法
- 解决卸载或者安装程序失败的问题,提示:错误 1402。无法打开键UNKNOWN\Components\xxx
- 编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序。