基于UDP的网络通讯程序
来源:互联网 发布:支付宝与淘宝解绑 编辑:程序博客网 时间:2024/06/05 07:26
我们知道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->resscessding(buff);
class CAsyncSocket::OnReceive(nErrorCode);
}三、数据处理与显示
我们设计程序时,数据通常在文档中处理,显示工作在视图中完成。当整个程序较小时,这感觉不到有何好处,但整个程序较大时,程序的条理就会较清晰,易读性好。所以一定要时时养成良好的设计习惯。数据在文档中处理如下:void CJieshouDoc:resscessding(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);
一、发送程序
首先建立数据发送程序(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->resscessding(buff);
class CAsyncSocket::OnReceive(nErrorCode);
}三、数据处理与显示
我们设计程序时,数据通常在文档中处理,显示工作在视图中完成。当整个程序较小时,这感觉不到有何好处,但整个程序较大时,程序的条理就会较清晰,易读性好。所以一定要时时养成良好的设计习惯。数据在文档中处理如下:void CJieshouDoc:resscessding(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);
- 基于UDP的网络通讯程序
- 基于UDP的网络通讯(socket)
- 基于WINSOCK控件的VC网络通讯程序
- 基于UDP的SOCKET程序
- 基于UDP的聊天程序
- 基于UDP的聊天程序
- 基于SIM300的GPRS网络通讯
- 安卓中基于socket的网络通讯
- 网络通讯选择TCP或UDP的指导方针
- 网络通讯TCP和UDP的编程流程
- 基于UDP协议的广播程序实例
- 基于UDP的聊天程序-JAVA
- 基于UDP协议的网络程序
- 基于UDP 的QQ聊天程序一
- 基于UDP 的QQ聊天程序 二
- 基于UDP协议的网络程序
- 基于UDP的控制台聊天程序
- vc++基于UDP的对话程序
- 编写Linux下的UDP Client/Server程序
- UDP协议的几个特性
- UDP协议的标题结构
- UDP用户数据报头格式
- Orz oz
- 基于UDP的网络通讯程序
- 全面掌握VisualC#实现UDP协议
- 构造特殊的UDP数据包能造成SQL Server服务器CPU负荷加重漏洞
- 使用Java JDK中Java.net包控制UDP协议
- telnet的常用命令
- 如何通过Telnet命令远程修改Winodws口令
- Telnet技术白皮书
- Telnet协议概述
- TELNET协议规范