来源: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的话,就不会出错,真奇怪了。不知道有没有官方的解释。
谢谢了哥们