您的位置:首页 > 理论基础 > 计算机网络

qt,tcp传输,文件传输,服务器无法完整发送数据的解决方法(只发送了文件名没用传输数据bytesWritten=0)

2012-11-11 20:45 316 查看
这个问题纠结了一整个星期,就是我在qt上写了个tcp协议收发文件,但是永远都是只传了文件名字,文件数据却一直传不过去。
bytesWritten一直是0
以为是socket方面没用一直连接导致文件传了个名字就没传数据,搞了很久,突然发现一个问题。界面:首先我是要先点击监听等待用户连接。待有用户连上后开始打开文件并发送。发送信号连接到文件转码槽,并且发送文件名字到客户端。在期间当然是要有
serverSocket = server->nextPendingConnection();
来获取连接的socket。
而我在构造函数里
server = new QTcpServer(this);
serverSocket = new QTcpSocket(this);
connect(serverSocket,SIGNAL(bytesWritten(qint64)),this,SLOT(updateServerProcess(qint64)));
为的是在发送文件名字后,通过bytesWritten信号来继续发送数据并更新进度条。
但是这里就出现了个问题。
我的connect(serverSocket,SIGNAL(bytesWritten(qint64)),this,SLOT(updateServerProcess(qint64)));
是在构造函数里面连接,server,serverSocket也是在构造函数里面定义,可是当我传输文件时只能传文件头,而且bytesWritten=0
虽然不知道为什么,但是代码的顺序总是很重要,我又怀疑bytesWritten这个信号可能在构造函数中虽然定义但是没有检测到,如果放在serverSocket = server->nextPendingConnection();
之后应该可以检测到,
也就是写成
serverSocket = server->nextPendingConnection();
connect(serverSocket,SIGNAL(bytesWritten(qint64)),this,SLOT(updateServerProcess(qint64)));在我的用户连接上之后
结构就成功了
虽然不是很懂但是总算解决了问题,
这期间也看了很多试了很多关于tcp传输的东西
虽然弯路走的多但是也挺有搜获
所以大家可以在这里留言提问
也可以帮我解决一下上面到底是为什么

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐