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程序连接,发现接收到的数据结构是一模一样的,从而排除了数据上的问题。
大家觉得还有可能是什么问题?
------解决方案--------------------
我觉得 QTcpSocket 最好是都是用异步操作,不要使用 waitFor 之类的函数,如果想快点把缓冲区的数据发出去,可以调用 flush 。
bytesWritten 看 Qt 的文档和源码,都是有发送这个信号的哦。
如果你写的数据量很小,要小心系统会缓存着一直不发送,可以设置 TCP_NODELAY 的socket选项。