WinSock提供了對UDP(用戶數據報協議)的支持,通過UDP協議我們可以向指定IP地址的主機發送數據,同時也可以從指定IP地址的主機接收數據,發送和接收方處於相同的地位沒有主次之分。利用CSocket操縱無連接的數據發送很簡單,首先生成一個本地套接口(需要指明SOCK_DGRAM標記),然後利用
int CAsyncSocket::SendTo( const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0 )發送數據,
int CAsyncSocket::ReceiveFrom( void* lpBuf, int nBufLen, CString& rSocketAddress, UINT& rSocketPort, int nFlags = 0 )接收數據。函數調用順序如圖。
利用UDP協議發送和接收都可以是雙向的,就是說任何一個主機都可以發送和接收數據。但是UDP協議是無連接的,所以發送的數據不一定能被接收,此外接收的順序也有可能與發送順序不一致。下面是相關代碼:
/*
發送方在端口6800上向接收方端口6801發送數據
*/
//發送方代碼:
BOOL CMy62_s1_clientDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//創建本地套接口
m_sockSend.Create(6800,SOCK_DGRAM,NULL);
//綁定本地套接口
m_sockSend.Bind(6800,"127.0.0.1");
//創建一個定時器定時發送
SetTimer(1,3000,NULL);
...
}
void CMy62_s1_clientDlg::OnTimer(UINT nIDEvent)
{
static iIndex=0;
char szSend[20];
sprintf(szSend,"%010d",iIndex++);
//發送UDP數據