CAsyncSocket UDP


1.重載CAsyncSocket

class CUDPSocket : public CAsyncSocket
{
public:
	CUDPSocket();
	virtual ~CUDPSocket();
	void SetParent(CDialog* pWnd);	
private:
	CDialog* m_pWnd;

	virtual void OnClose(int nErrorCode);
	virtual void OnReceive(int nErrorCode);
	virtual void OnSend(int nErrorCode);
};

2.通訊過程:

Server Client
Create:
m_ServerPort:指定本機的端口;
SOCK_DGRAM:UDP通訊方式。

m_ClientPort:指定本機的端口;
SOCK_DGRAM:UDP通訊方式。

Create(m_ServerPort,SOCK_DGRAM);

Create(m_ClientPort,SOCK_DGRAM);
Send:
m_Message:指定發送信息(注意該結構體內不應含有變長數據類型,如CString)
m_ClientPort:信息接受端的端口號
m_strClientIP:信息接收端的IP地址

m_Message:指定發送信息(注意該結構體內不應含有變長數據類型,如CString)
m_ServerPort:信息接受端的端口號
m_strServerIP:信息接收端的IP地址

int iSent = m_sDataSocket.SendTo(&m_Message,sizeof(MSGSTRUCT), m_ClientPort, m_strClientIP.GetBuffer(m_strClientIP.GetLength()+1));
Send:

int iSent = m_sDataSocket.SendTo(&m_Message,sizeof(MSGSTRUCT), m_ServerPort, m_strServerIP.GetBuffer(m_strServerIP.GetLength()+1));

Receive:

m_Message:用來接受數據的緩存區

rSocketAddress:信息來源的IP地址

rSocketPort:信息來源的端口號


m_Message:用來接受數據的緩存區

rSocketAddress:信息來源的IP地址

rSocketPort:信息來源的端口號


CString rSocketAddress;
UINT rSocketPort;
int iRcvd = m_sDataSocket.ReceiveFrom(&m_Message,sizeof(MSGSTRUCT), rSocketAddress, rSocketPort);


CString rSocketAddress;
UINT rSocketPort;
int iRcvd = m_sDataSocket.ReceiveFrom(&m_Message,sizeof(MSGSTRUCT), rSocketAddress, rSocketPort);

   

 

3.具體連接步驟:

(1)Server、Client分別建立自己的連接Create;

(2)Client事先知道Server的Port和IP地址;Client向Server發送消息SendTo

(3)Server接受到來自某個UDP的連接(在這里為Client),獲得來源Client的IP和Port;

(4)Server向來源Client發送消息。

4.小結

用CAsyncSocket 做UDP通信方式,理解起來很簡單。實現起來花了點功夫。找到的資料大多是TCP通訊方式的。

5.參考資料

http://support.microsoft.com/kb/214396/

http://www.codeproject.com/Articles/16581/Sending-Receiving-UDP-Datagrams-with-MFC-s-CAsyncS


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM