| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
Visual C++/MFC入门教程--第六章 网络通信开发
作者:未知    文章来源:网络    点击数:    更新时间:2006-7-22
 
6.3 利用WinSock进行有连接的通信

WinSock提供了对TCP(传输控制协议)的支持,通过TCP协议我们可以与指定IP地址的主机建立,同时利用建立的连接可以双向的交换数据。利用CSocket操纵有连接数据交换很简单,但是在有连接的通信中必需有一方扮演服务器的角色等待另一方(客户方)的连接请求,所以服务器方需要建立一个监听套接口,然后在此套接口上等待连接。当连接建立后会产生一个新的套接口用于通信。而客户方在创建套接口后只需要简单的调用连接函数就可以创建连接。对于有连接的通信不论是数据的发送还是发送与接收的顺序都是有保证的。双方的函数调用顺序如图。
下面的代码演示了如何建立连接和发送/接收数据: 
/*
服务器方在端口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);
 }
...
}


下载例子代码,63_s1_client工程为客户,63_s1_server工程为服务器方。  

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


  • 上一篇文章:

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