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

📄 teach_road_63.htm

📁 最佳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.3 利用<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.3 利用<font class=eng>WinSock</font>进行有连接的通信</big></p>
<table border=0 align=center width=100%>
<tr><td>
<small>
<p>WinSock提供了对TCP(传输控制协议)的支持,通过TCP协议我们可以与指定IP地址的主机建立,同时利用建立的连接可以双向的交换数据。利用CSocket操纵有连接数据交换很简单,但是在有连接的通信中必需有一方扮演服务器的角色等待另一方(客户方)的连接请求,所以服务器方需要建立一个监听套接口,然后在此套接口上等待连接。当连接建立后会产生一个新的套接口用于通信。而客户方在创建套接口后只需要简单的调用连接函数就可以创建连接。对于有连接的通信不论是数据的发送还是发送与接收的顺序都是有保证的。双方的函数调用顺序<a href=63_g1.gif target=_blank>如图</a>。</p>
<p>下面的代码演示了如何建立连接和发送/接收数据:
<pre>
/*
服务器方在端口6802上等待连接,当连接建立后关闭监听套接口
客户方向服务器端口6802发起连接请求
*/
BOOL CMy63_s1_serverDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	CSocket sockListen;
	//创建本地套接口
	sockListen.Create(6802,SOCK_STREAM,"127.0.0.1");
	//绑定参数
	sockListen.Bind(6802,"127.0.0.1");
	sockListen.Listen(5);
	//等待连接请求,m_sockSend为成员变量,用于通信
	sockListen.Accept(m_sockSend);
	//关闭监听套接口
	sockListen.Close();
	//启动定时器,定时发送数据
	SetTimer(1,3000,NULL);
...
}
void CMy63_s1_serverDlg::OnTimer(UINT nIDEvent) 
{
	static iIndex=0;	
	char szSend[20];	
	sprintf(szSend,"%010d",iIndex++);	
	//发送TCP数据
	int iSend= m_sockSend.Send(szSend,10,0);
...
}
BOOL CMy63_s1_clientDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	//创建本地套接口
	m_sockRecv.Create();
	//发起连接请求
	BOOL fC=m_sockRecv.Connect("127.0.0.1",6802);
	TRACE("connect is %s\n",(fC)?"OK":"Error");
	//启动定时器,定时接收数据
	SetTimer(1,3000,NULL);
...
}
void CMy63_s1_clientDlg::OnTimer(UINT nIDEvent) 
{
	char szRecv[20];	
	//接收TCP数据
	int iRecv =m_sockRecv.Receive(szRecv,10,0);
	TRACE("received %d byte\n",iRecv);	
	if(iRecv>=0)
	{
		szRecv[iRecv]='\0';
		m_szRecv=szRecv;
		UpdateData(FALSE);
	}
...
}

</pre>
<a href=63_s1.zip>下载例子代码</a>,63_s1_client工程为客户,63_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 + -