首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Visual C++ > 利用WinSock进行无连接的通信
【标  题】:利用WinSock进行无连接的通信
【关键字】:c,in,连接,Win,WinSock,Wi,WinSock
【来  源】:网络

利用WinSock进行无连接的通信


下载本文所附源代码


程序运行效果截图:


WinSock提供了对UDP(用户数据报协议)的支持,通过UDP协议我们可以向指定IP地址的主机发送数据,同时也可以从指定IP地址的主机接收数据,发送和接收方处于相同的地位没有主次之分。利用CSocket操纵无连接的数据发送很简单,首先生成一个本地套接口(需要指明SOCK_DGRAM标记),然后利用
int CAsyncSocket::SendTo( const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0 )发送数据,
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,"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);
...
}
/*
接收方采用同步读取数据的方式,所以没有读到数据函数调用将不会返回
*/
OICQ登录号码清除器实现原理:【上一篇】
用Sockets接收和转换数字和字符串数据:【下一篇】
【相关文章】
  • OICQ登录号码清除器实现原理
  • 用VC 6.0实现串行通信的三种方法
  • 一个不错的tcp客户端ocx控件
  • 一个不错的tcp客户端ocx控件(加上了服务端的代码)
  • 工业控制--串口通讯方法(WINAPI实现)
  • 用VC++6.0的Sockets API实现一个聊天室程序
  • WinSocket高级实现(聊天室的实现)(一)
  • WinSocket高级实现(聊天室的实现)(二)
  • 串口侦听监视及TCP/IP协议解析软件简介
  • 用VC实现拨号上网程序
  • 【随机文章】
  • 显示左边的n个字符(自动识别汉字)函数(探索者)
  • Photoshop数字星云
  • 如何让Linux使用ADSL联机分享
  • C++ 的词法分析
  • freebsd 6 deny ddos
  • FreeBSd6.0建立网页服务器
  • 浅谈塑料光纤在短距离通信中的应用
  • 很高兴,看到csdn的blog在维护
  • .NET下GDI+的一些常用应用(水印,文字,圆角处理)
  • Word 2000表格编辑"自动化"
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.