| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
Visual C++/MFC入门教程--第六章 网络通信开发
作者:未知    文章来源:网络    点击数:    更新时间:2006-7-22
 
6.2 利用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);
...
}
/*
接收方采用同步读取数据的方式,所以没有读到数据函数调用将不会返回
*/

下载例子代码,62_s1_client工程为发送方,62_s1_server工程为接收方。 

上一页  [1] [2] [3] 下一页


  • 上一篇文章:

  • 下一篇文章: 没有了
  • 相关文章