本文程序运行效果图如下:
一、发送程序
首先建立数据发送程序(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);
}