c++SOcket非阻塞编程中打开了多个端口,为啥有时会发生各个端口相互干扰
基本代码如上,开通了两个端口分别用于发生不同种类的数据,OnRecv1中和OnRecv2中被调用时应该传进去的参数CurSocket应该是两个固定的不同的Socket的才...
基本代码如上,开通了两个端口分别用于发生不同种类的数据,OnRecv1中和OnRecv2中被调用时应该传进去的参数CurSocket应该是两个固定的不同的Socket的才对呀,但是调试时发现有时会出现混淆,结果导致两个端口的数据都在OnRecv1中可以收到,导致数据混杂,请问怎么回事?
展开
2个回答
展开全部
就代码来看,你自己添加的消息响应函数,主要是监听端口是否发生了变化,两个OnNetEvent的性质相同,就是只要端口发生了变化,就会响应这个函数,而你两个event响应函数基本相同,所以会发生你说的问题,一般只绑定一个端口用于监听。如果一定要绑定多个端口,实现非阻塞通信,可尝试一下多线程,这样应该不会产生干扰。
追答
你注册的两个网络事件,并不表示这两个响应事件就被分配到两个端口进行监听,不论是port1,还是port2有变化,两个事件都会响应,因为他们只是监听网络端口是否有变化,所以wParam有时是350有时是360,如果你把onrecv这个函数写成接收的网络数据,应该就不会有交叉,但建立用多线程,这样的编写方式不推荐,因为每次两个事件都会响应,无论有该端口无数据
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询