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.通讯过程:

ServerClient
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

转载于:https://www.cnblogs.com/cmooon/archive/2012/05/24/2517057.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值