利用WinSock进行无连接的通信

本文详细介绍了如何使用WinSock进行基于UDP协议的无连接通信,包括创建和绑定套接字,以及通过CAsyncSocket类的SendTo和ReceiveFrom方法实现数据的发送与接收。文章通过实例代码展示了客户端和服务器端的具体操作。

利用WinSock进行无连接的通信

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数据

       int iSend= m_sockSend.SendTo(szSend,10,6801,"127.0.0.1",0);

       TRACE("sent %d byte\n",iSend);

...

}

 

//接收方代码

BOOL CMy62_s1_serverDlg::OnInitDialog()

{

       CDialog::OnInitDialog();

 

       //创建本地套接口

       m_sockRecv.Create(6801,SOCK_DGRAM,"127.0.0.1");

       //绑定本地套接口

       m_sockRecv.Bind(6801,"127.0.0.1");

       //创建一个定时器定时读取

       SetTimer(1,3000,NULL);

...

}

void CMy62_s1_serverDlg::OnTimer(UINT nIDEvent)

{

       char szRecv[20];

       CString szIP("127.0.0.1");

       UINT uPort=6800;

       //接收UDP数据

       int iRecv =m_sockRecv.ReceiveFrom(szRecv,10,szIP,uPort,0);

       TRACE("received %d byte\n",iRecv);

...

}

/*接收方采用同步读取数据的方式,所以没有读到数据函数调用将不会返回*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值