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传输的东西
虽然弯路走的多但是也挺有搜获
所以大家可以在这里留言提问
也可以帮我解决一下上面到底是为什么
相关文章推荐
- Qt中的QTcpSocket类的write()方法不能发送数据的解决方法
- Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)
- Windows Server 2003 使用vSphere5.5连接ESXI5.5 “客户端无法向服务器发送完整的请求” 的解决办法
- [转载]XP向windows 7传输文件时系统提示“服务器存储空间不足,无法处理此命令”故障的解决方法
- Qt中的QTcpSocket类的write()方法不能发送数据的解决方法
- Qt串口通信接收数据不完整的解决方法(传输图片)
- Python中使用socket发送HTTP请求数据接收不完整问题解决方法
- Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)
- STM---串口发送数据,第一个数据无法发送的解决方法
- xcode8 控制台打印从后台获取的json数据太多无法显示完整解决方法
- Windows Server 2003 使用vSphere5.5连接ESXI5.5 “客户端无法向服务器发送完整的请求” 的解决办法
- 解决连接vcenter (客户端无法向服务器发送完整的请求。(基础连接已经关闭:发送时发生错误。)) 问题
- socket接收服务器数据,输出为乱码或无法输出的解决方法
- 客户端C和服务器S之间建立一个TCP连接,该连接总是以1KB的最大段长发送TCP段,客户端C有足够的数据要发送。当拥塞窗口为16KB的时候发生超时,如果接下来的4个RTT往返时间内的TCP段的传输是成
- SharePoint 2010 Reporting Services 报表服务器无法解密用于访问报表服务器数据库中的敏感数据或加密数据的对称密钥 解决方法
- 关于“无法从传输连接中读取数据: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”错误的解决方法之一
- TCP数据传输(四):上传文件操作(将客户端的文件发送到服务器)
- Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)
- Python中使用socket发送HTTP请求数据接收不完整问题解决方法
- QT 简单 TCP 通信,发送数据到服务器