好文档 - 专业文书写作范文服务资料分享网站

Visual_C++MFC入门教程(免费版)

天下 分享 时间: 加入收藏 我要投稿 点赞

木有页眉

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,\ //创建一个定时器定时发送 SetTimer(1,3000,NULL); ... }

void CMy62_s1_clientDlg::OnTimer(UINT nIDEvent) {

81

木有页眉

static iIndex=0; char szSend[20]; sprintf(szSend,\ //发送UDP数据 int iSend= m_sockSend.SendTo(szSend,10,6801,\ TRACE(\... }

//接收方代码

BOOL CMy62_s1_serverDlg::OnInitDialog() { CDialog::OnInitDialog(); //创建本地套接口 m_sockRecv.Create(6801,SOCK_DGRAM,\ //绑定本地套接口 m_sockRecv.Bind(6801,\ //创建一个定时器定时读取 SetTimer(1,3000,NULL); ... }

void CMy62_s1_serverDlg::OnTimer(UINT nIDEvent) { char szRecv[20]; CString szIP(\ UINT uPort=6800; //接收UDP数据 int iRecv =m_sockRecv.ReceiveFrom(szRecv,10,szIP,uPort,0); TRACE(\... } /*

接收方采用同步读取数据的方式,所以没有读到数据函数调用将不会返回 */

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

6.3 利用WinSock进行有连接的通信

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

82

木有页眉

是有保证的。双方的函数调用顺序如图。

下面的代码演示了如何建立连接和发送/接收数据:

/*

服务器方在端口6802上等待连接,当连接建立后关闭监听套接口 客户方向服务器端口6802发起连接请求 */

BOOL CMy63_s1_serverDlg::OnInitDialog() { CDialog::OnInitDialog(); CSocket sockListen; //创建本地套接口 sockListen.Create(6802,SOCK_STREAM,\ //绑定参数 sockListen.Bind(6802,\ sockListen.Listen(5); //等待连接请求,m_sockSend为成员变量,用于通信 sockListen.Accept(m_sockSend);

83

木有页眉

//关闭监听套接口 sockListen.Close(); //启动定时器,定时发送数据 SetTimer(1,3000,NULL); ... }

void CMy63_s1_serverDlg::OnTimer(UINT nIDEvent) { static iIndex=0; char szSend[20]; sprintf(szSend,\ //发送TCP数据 int iSend= m_sockSend.Send(szSend,10,0); ... }

BOOL CMy63_s1_clientDlg::OnInitDialog() { CDialog::OnInitDialog(); //创建本地套接口 m_sockRecv.Create(); //发起连接请求 BOOL fC=m_sockRecv.Connect(\ TRACE(\ //启动定时器,定时接收数据 SetTimer(1,3000,NULL); ... }

void CMy63_s1_clientDlg::OnTimer(UINT nIDEvent) { char szRecv[20]; //接收TCP数据 int iRecv =m_sockRecv.Receive(szRecv,10,0); TRACE(\ if(iRecv>=0) { szRecv[iRecv]='\\0'; m_szRecv=szRecv; UpdateData(FALSE); } ... }

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

84

Visual_C++MFC入门教程(免费版)

木有页眉intCAsyncSocket::ReceiveFrom(void*lpBuf,intnBufLen,CString&rSocketAddress,UINT&rSocketPort,intnFlags=0)接收数据。函数调用顺序如图。利用UDP协议发送和接收都可以是双向的,就是说任何一个主机都可以发送和接收数
推荐度:
点击下载文档文档为doc格式
5sv4n9qpyw5s23r4ajle
领取福利

微信扫码领取福利

微信扫码分享