[求助]异步方式处理Socket接收方案探讨,在线等!
问题源于以前未结的帖子http://topic.csdn.net/u/20120801/16/703112aa-9296-4cc1-b888-473ffc2fd758.html?seed=670887654&r=79290315#r_79290315
假设2台主机A、B都向一台主机C发送图片数据,我的异步方式处理接收方案:如果我的想法是对的,我就继续往下进行,如果有问题,大家帮忙看看或者给些建议。
采用UDP协议,WInsocket通信。
设:
A主机IP地址为IPA套接字绑定端口1025------------>C主机IP地址为IPC套接字A绑定端口5001
B主机IP地址为IPB套接字绑定端口1025------------>C主机IP地址为IPC套接字B绑定端口5002
C主机程序中,声明两个套接字变量用于接收,问题是:
我在主线程中声明两个套接字变量,然后在OnInitDialog()中分别初始化和绑定(用WInsocket API),并设置异步通信方式WSAAsyncSelect(m_SocketA,m_hWnd,CM_RECEIVEDA,FD_READ),
WSAAsyncSelect(m_SocketB,m_hWnd,CM_RECEIVEDB,FD_READ),问:
1、我这样做对不对。
2、如果对,要实现多线程接收该是什么思路,与上述方案有什么区别。
[解决办法]
1、建议初始化socket在app的initial中做。
2、如果数据量很大的话,不建议这么做,还是开两个线程,在线程循环recvfrom
[解决办法]
WSAAsyncSelect一般是单线程使用的模式,多线程模式就是简单的处理,如果连接不多可以使用,具体来说就是一个线程干一种活,例如recvfrom一个端口就在一个线程中循环处理,不需要使用阻塞模式,但如果预计到连接数会超出CPU内核个数的两倍时这种多线程方式的响应会严重 滞后,但这种多线程编程方法简单很好处理是他的优势