?? teach_road_62.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="聞怡洋 wyy_cq@21cn.com">
<title>Visual C++/MFC開發指南</title>
<SCRIPT LANGUAGE='JavaScript' SRC='../../submit_navigate_bar.js'></SCRIPT>
<link REL="stylesheet" HREF="../../main.css">
</head>
<SCRIPT LANGUAGE='JavaScript'>write_body();</SCRIPT>
<SCRIPT LANGUAGE='JavaScript'>write_bar();</SCRIPT>
<p align="center"><a
HREF="http://www.0828.com/pay/cgi-bin/random.cgi?job=go&id=820"
target="_blank">
<img SRC="http://www.0828.com/pay/cgi-bin/random.cgi?id=820" BORDER="0"
width="468" height="60"></a><br>
<font size="2"><a href="http://www.0828.com/pay/index.html"><img border="0"
src="http://www.0828.com/pay/code.gif" width="468" height="15"></a><br>
<small>你每點一下上面的廣告我就能有更多的上網時間為大家尋找資料</small></font>
</p>
<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="#003D84" valign=middle><img src=../../img/brand_200_60.gif width=200 height=60 alt="LOGO1"></td>
<td width="70%" align="center" bgcolor="#003D84" valign=middle><img src=../../img/logo_400_60.gif width=400 height=60 alt="LOGO2"></td>
</tr>
<tr>
<td colspan="2" bgcolor="#0080C0" 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><SCRIPT LANGUAGE='JavaScript'>write_command();</SCRIPT></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-->
<!--- BEGIN CLICK2NET CODE --->
<center><a href="http://redirect.click2net.com/?A056824,92" target="_blank">
<img border=0 alt="你每點一下廣告我就能有更多的上網時間為大家尋找資料" src="http://image.click2net.com/?A056824,92" width="468" height="60"></a>
<br><font style=small class=engul><a href="http://www.click2net.com/" target="_blank">Free Advertising from Click2Net!</a></font></center>
<!--- END CLICK2NET CODE --->
<SCRIPT LANGUAGE='JavaScript'>write_tail();</SCRIPT>
</body></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -