中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 网络与通信
一个基于UDP的网络通迅程序
作者:未知 时间:2005-07-20 14:16 出处:VC知识库 责编:chinaitpower
              摘要:一个基于UDP的网络通迅程序

一个基于UDP的网络通迅程序
作者:刘永超

下载本文配套源代码

我们知道TCP/IP协议是至今发展最为成功的协议之一,也是整个互联网的基础。它在传输层有两个不同的协议:TCP和UDP,用途都很广泛,下面我就UDP做一个示例程序。整个例子有两个程序组成,一个发送数据,另一个程序接收数据后,完成绘图工作。

本文程序运行效果图如下:



一、发送程序
首先建立数据发送程序(Fason)。一共发送四个数据:圆心的X坐标、圆心的Y坐标、圆半径R、圆的颜色。它的实现主要如下:

void CFasonDlg::OnSend() 
{
	UpdateData(TRUE);
	CString m_Getstring;
	
	this->m_Cob.GetLBText(m_Cob.GetCurSel(),m_Getstring);
	if(m_Getstring==_T("Red"))
	yuan1.color=1;
	if(m_Getstring==_T("Green"))
		yuan1.color=2;
	if(m_Getstring==_T("Blue"))
		yuan1.color=3;
	yuan1.x=m_x;
	yuan1.y=m_y;
	yuan1.r=m_r;

	p=&yuan1;

	CDSocket m_hSocket;
	m_hSocket.Create(2330,SOCK_DGRAM);
	m_hSocket.SendTo( p,sizeof(yuan1),3550,"127.0.0.1");//用结构体发送。

    m_x=0;
    m_y=0;
    m_r=0;
    m_hSocket.Close();
    UpdateData(FALSE);
}
发送数据时有一个技巧,就是所有数据放在一个结构体中来发送,不用一个一个发送。但是不能在结构体中包含CString等可以变长的数据类型。

二、接收程序
下面我们看一下接收数据端的程序(Jieshou)。如下:
void CDASocket::OnReceive(int nErrorCode) 
{
	char buff[256];
	int ret=0;
	ret=Receive(buff,256);
	if(ret==ERROR)
	{
		TRACE("ERROR!");
	}
	else 
	m_pDoc->Presscessding(buff);
	class CAsyncSocket::OnReceive(nErrorCode);
}
三、数据处理与显示
我们设计程序时,数据通常在文档中处理,显示工作在视图中完成。当整个程序较小时,这感觉不到有何好处,但整个程序较大时,程序的条理就会较清晰,易读性好。所以一定要时时养成良好的设计习惯。数据在文档中处理如下:
void CJieshouDoc::Presscessding(char* lbuff)
{
	buff=(struct yuan*)lbuff;
	p.x=buff->x;

	p.y=buff->y;
	p.r=buff->r;
	p.color=buff->color;
	UpdateAllViews(NULL);
}
在视图中的显示如下:
void CJieshouView::OnDraw(CDC* pDC)
{
	CJieshouDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	x=pDoc->p.x;
	y=pDoc->p.y;
	r=pDoc->p.r;
	if(pDoc->p.color==1)
	pDC->SelectObject(new CBrush(RGB(255,0,0)));
	if(pDoc->p.color==2)
		pDC->SelectObject(new CBrush(RGB(0,255,0)));
	if(pDoc->p.color==3)
		pDC->SelectObject(new CBrush(RGB(0,0,255)));
	
	  pDC->Ellipse(x-r,y-r,x+r,y+r);
}

(全文完)

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有