Qtcpsocket The remote host closed the connection


来源:http://bbs.csdn.net/topics/390821598


C/S程序,tcp连接。

本来都是用winsock写的。

server端对我来说是黑盒的,
现在想把客户端改成用qt实现(qtcpsocket)。

现在的问题是,连接能够连接上,
但是下面代码
if(!SendDataToEC(&head,sizeof(HEAD)))
   {
        return buf;
   }
    socket->waitForBytesWritten();


走到红色代码行的时候就会触发error信号,提示信息是The remote host closed the connection 。

由于server端是黑盒的。我自己又用winsock写了一个简单的tcpserver端程序。
然后分别用用qt写的和winsock 写的client程序连接,发现接收到的数据结构是一模一样的,从而排除了数据上的问题。

大家觉得还有可能是什么问题?




不要调用红色代码。Qt 的socket 被设置成了异步,这种 waitForxxxx 函数容易出问题,如果你想知道数据有没有写入,可以连接 bytesWritten 信号。

另外 QTcpSocket 内部有自己的缓冲区,你调用 write() 时只要判断返回值是否等于要写入的数据量即可,如果不等,你需要把数据缓存起来下次再发送。



确实是,不用waitforXXX的话,就不会出错,真奇怪了。不知道有没有官方的解释。

谢谢了哥们





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值