利用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);
...
}
/*
接收方采用同步读取数据的方式,所以没有读到数据函数调用将不会返回
*/
↓相关文章:
- · 如何隐藏显示在任务栏中的对话框程序
- · 根据文本串的长度改变窗口的大小
- · 在Visual Studio 6.0集成环境中开发设备驱动程序的方法
- · 以原始套接字的方式 截获流经本机网卡的IP数据包
- · 浅谈内存泄漏(二)
- · 一个键盘程序的开发实例
- · 用VC++6.0的Sockets API实现一个聊天室程序
- · 如何用非对称密码算法制作共享软件的注册码
- · 在ActiveX控件中如何动态调用DLL函数
- · 得到托盘区位置与动态显示/隐藏窗口
- · 如何创建一个不规则形状的窗口
- · VC++环境下浮动工具条的编程
- · Visual C++中位图按钮的新颖设计
- · 用VC 开发基于ORACLE数据库应用程序的两种方法
- · 为CListBox加上智能水平滚动条
- · 在VC中动态加载 ODBC的方法
- · 一个简单的显示文字控件
- · VB调用C程序的方法—动态链接库法
- · 一个简单的显示文字控件-atl版本
- · 一个简单的显示文字控件-MFC/ActiveX版本
- · 深入剖析MFC中Windows消息处理、运行机制
- · VC代码的编写和调试
- · Dynamic-Link Libraries(DLLS)在MFC Visual C++ 6中的使用问题
- · Visual C++实现Flash动画播放
- · Visual C++窗体设计技巧集
- · 常见Visual C++开发使用问答(上)
- · Visual C++中的ODBC编程实例
- · 从赋值运算符的默认实现中获益(第一部分)
- · 正确地调用字符串相关的函数(第一部分)
- · 用VC设计托盘图标程序
- · 如何创建无模式对话框
- · 在Windows95/98中实现苹果窗口界面
- · .NET架构的核心开发技术
- · 采用循环双向链表, 能实现多个长整型进行加法运算的源代码
- · 如何获取屏幕上各颜色的红、绿、蓝值
- · Microsoft .NET完全介绍(上)
- · Microsoft .NET完全介绍(下)
- · 用VC进行COM编程所必须掌握的理论知识
- · Windows 9X硬件中断设备驱动程序的开发
- · 一个功能强大的MFC界面处理扩展库:CJ60Lib
- · 在VC中用CMenuXP使应用程序拥有Office XP风格的界面
- · 在Visual C++中用ADO进行数据库编程(中)
- · 用Visual C++开发数据库应用程序(一)
- · 用Visual C++开发数据库应用程序(三)
- · 用Visual C++开发数据库应用程序(五)

