1个回答
2013-04-14
展开全部
你是怎么确定只能收到一次的? 你看一下tcpsocket的状态是否是error啊。
手册中是这么说的:
This signal is emitted once every time new data is available for reading from the device. It will only be emitted again once new data is available, such as when a new payload of network data has arrived on your network socket, or when a new block of data has been appended to your device.
意思是readyread信号在且只在有新数据到达时才会被发射。需要注意的是readyread并不是递归的(readyRead() is not emitted recursively)。
所以在收到新数据的时候只要你没有解除链接,那么这个就一直存在,除非socket状态编程error或者closingstatus等特殊状态。
手册中是这么说的:
This signal is emitted once every time new data is available for reading from the device. It will only be emitted again once new data is available, such as when a new payload of network data has arrived on your network socket, or when a new block of data has been appended to your device.
意思是readyread信号在且只在有新数据到达时才会被发射。需要注意的是readyread并不是递归的(readyRead() is not emitted recursively)。
所以在收到新数据的时候只要你没有解除链接,那么这个就一直存在,除非socket状态编程error或者closingstatus等特殊状态。
更多追问追答
追问
因为我发了两次,结果只收到一次的。我用的是linux下的QT里面的QTcpServer和QTcpSocket,
追答
1.有可能是你的connect 过晚让第一次信号没来得及被处理。
2.就是由于出现了某种错误使得第二次到达时socket处于异常状态,不能接收。
3.你使用跨线程,但是在远端断开之后就进入RemoteHostClosedError状态,因为可能由于处理了这个信号造成你的跨线程信号仍然阻塞在队列中。
4.一个可能性比较小的,你可以调用一下QApplication::processEvent(),有可能某些时间被那啥了……不过从4.3以来这种状况就比较少了。
5.最后如果你是在找不到错在哪里,请打开wireshark,抓包分析吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询