资源描述:
《一个基于udp的网络通迅程序实例》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、一个基于UDP的网络通迅程序类别:VC网络类编程我们知道TCP/IP协议是至今发展最为成功的协议之一,也是整个互联网的基础。它在传输层有两个不同的协议:TCP和UDP,用途都很广泛,下面我就UDP做一个示例程序。整个例子有两个程序组成,一个发送数据,另一个程序接收数据后,完成绘图工作。本文程序运行效果图如下:一、发送程序首先建立数据发送程序(Fason)。一共发送四个数据:圆心的X坐标、圆心的Y坐标、圆半径R、圆的颜色。它的实现主要如下:voidCFasonDlg::OnSend(){UpdateData(TRUE);CStringm_Getstring;this->m_Cob.G
2、etLBText(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;CDSocketm_hSocket;m_hSocket.Create(2330,SOCK_DGRAM);m_hSocket.SendTo(p,sizeof(yuan1),3
3、550,"127.0.0.1");//用结构体发送。m_x=0;m_y=0;m_r=0;m_hSocket.Close();UpdateData(FALSE);}发送数据时有一个技巧,就是所有数据放在一个结构体中来发送,不用一个一个发送。但是不能在结构体中包含CString等可以变长的数据类型。二、接收程序下面我们看一下接收数据端的程序(Jieshou)。如下:voidCDASocket::OnReceive(intnErrorCode){charbuff[256];intret=0;ret=Receive(buff,256);if(ret==ERROR){TRACE("ERROR
4、!");}elsem_pDoc->Presscessding(buff);classCAsyncSocket::OnReceive(nErrorCode);}三、数据处理与显示我们设计程序时,数据通常在文档中处理,显示工作在视图中完成。当整个程序较小时,这感觉不到有何好处,但整个程序较大时,程序的条理就会较清晰,易读性好。所以一定要时时养成良好的设计习惯。数据在文档中处理如下:voidCJieshouDoc::Presscessding(char*lbuff){buff=(structyuan*)lbuff;p.x=buff->x;p.y=buff->y;p.r=buff->r;p
5、.color=buff->color;UpdateAllViews(NULL);}在视图中的显示如下:voidCJieshouView::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(newCBrush(RGB(255,0,0)));if(pDoc->p.color==2)pDC->SelectObject(newCBrush(RGB(0,255,0)
6、));if(pDoc->p.color==3)pDC->SelectObject(newCBrush(RGB(0,0,255)));pDC->Ellipse(x-r,y-r,x+r,y+r);}利用WinSock进行无连接的通信类别:VC网络类编程WinSock提供了对UDP(用户数据报协议)的支持,通过UDP协议我们可以向指定IP地址的主机发送数据,同时也可以从指定IP地址的主机接收数据,发送和接收方处于相同的地位没有主次之分。利用CSocket操纵无连接的数据发送很简单,首先生成一个本地套接口(需要指明SOCK_DGRAM标记),然后利用intCAsyncSocket::Sen
7、dTo(constvoid*lpBuf,intnBufLen,UINTnHostPort,LPCTSTRlpszHostAddress=NULL,intnFlags=0)发送数据,intCAsyncSocket::ReceiveFrom(void*lpBuf,intnBufLen,CString&rSocketAddress,UINT&rSocketPort,intnFlags=0)接收数据。函数调用顺序如图。利用UDP协议发送和接收都可以是双向的,就是说任何一个主机