论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

利用WinSock进行无连接的通信_VC技术_C语言教程

文章类别:C语言程序设计 | 发表日期:2010-6-19 10:00:04

利用WinSock进行无连接的通信_VC技术_C语言教程

本文来自21视频教程网C语言频道

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("se nt %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("re ceived %d byte\n",iRecv);
...
}
/*
接收方采用同步读取数据的方式,所以没有读到数据函数调用将不会返回
*/
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058