⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teach_road_62.htm

📁 闻怡洋VC基础教程 里面是一些VC的基础知识
💻 HTM
字号:

<!-- LANGUAGE='JavaScript'>write_body();<-->
<!-- LANGUAGE='JavaScript'>write_bar();<-->


<table width=98% cellspacing="0" cellpadding="0" align=center><!--整体框架-->
<tr><td>

<table border=0 width="100%" cellspacing="0" cellpadding="2"><!--标记放置区域-->
<tr>
	<td width="30%" align="center" bgcolor="#8E8E8E" valign=middle><img src=../../img/brand_200_60.gif width=200 height=60 alt="LOGO1"></td>
	<td width="70%" align="center" bgcolor="#8E8E8E" valign=middle><!-- LANGUAGE='JavaScript'>write_ban();<--></td>
</tr>
<tr>
	<td colspan="2" bgcolor="#939393" align=center><font color=white>您当前位置</font></font> <a href=../../index.htm><font color=white>首页</font></a> <a href=../index.htm><font color=white>开发教程</font></a> <a href=index.htm><font color=white><font class=engul>Visual C++/MFC</font>入门教程</font></a> <font color=white>6.2 利用<font class=eng>WinSock</font>进行无连接的通信</font><!-- LANGUAGE='JavaScript'>write_command();<--></td>
</tr>
</table><!--标记放置区域 END-->

<table border=0 width=100% cellspacing="0" cellpadding="0">
<tr>
<td><!--begin-->

<br>
<p align=center><big>6.2 利用<font class=eng>WinSock</font>进行无连接的通信</big></p>
<table border=0 align=center width=100%>
<tr><td>
<small>
<p>WinSock提供了对UDP(用户数据报协议)的支持,通过UDP协议我们可以向指定IP地址的主机发送数据,同时也可以从指定IP地址的主机接收数据,发送和接收方处于相同的地位没有主次之分。利用CSocket操纵无连接的数据发送很简单,首先生成一个本地套接口(需要指明SOCK_DGRAM标记),然后利用
<br>int CAsyncSocket::SendTo( const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0 )发送数据,
<br>int CAsyncSocket::ReceiveFrom( void* lpBuf, int nBufLen, CString& rSocketAddress, UINT& rSocketPort, int nFlags = 0 )接收数据。函数调用顺序<a href=62_g1.gif target=_blank>如图</a>。</p>
<p>利用UDP协议发送和接收都可以是双向的,就是说任何一个主机都可以发送和接收数据。但是UDP协议是无连接的,所以发送的数据不一定能被接收,此外接收的顺序也有可能与发送顺序不一致。下面是相关代码:
<pre>
/*
发送方在端口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);
...
}
/*
接收方采用同步读取数据的方式,所以没有读到数据函数调用将不会返回
*/
</pre>
<a href=62_s1.zip>下载例子代码</a>,62_s1_client工程为发送方,62_s1_server工程为接收方。
</p>
<p></p>
<p></p>
<p></p>
</small>
</td>
</tr>
<tr><td>
<small>
<p align=center><a href=index.htm#charpter6>返回</a></p>
</small>
</td></tr>
</table>
<p align=center><small>版权所有 闻怡洋 <a href=http://www.vchelp.net/>http://www.vchelp.net/</a></small></p>

</td><!--end-->
</tr>
</table>

</td></tr></table><!--整体框架 END-->





<!-- LANGUAGE='JavaScript'>write_tail();<-->


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -