WINCE上实现UDP通信(100%可行!)
电子元件,电子元器件深圳市创唯电子有限公司
您现在的位置: 首页 > 电子技术
WINCE上实现UDP通信(100%可行!)  2012/3/1
首先介绍一下,开发平台:WINCE 4.2 (WINCE 5.0也适用,因为使用了静态编译MFC动态链接库);开发工具:VS2005。  接下来开始修改代码:  view plaincopy to clipboardprint?  1.修改UDP_CE.CPP的SendData函数为:  bool CUDP_CE::SendData(const char *buf, int len)  {  int nBytes = 0;  int nErrorCode;  nBytes = sendto(m_UDPSocket,buf,len,0,(sockaddr*)&m_RemoteAddr,sizeof(m_R

首先介绍一下,开发平台:WINCE 4.2 (WINCE 5.0也适用,因为使用了静态编译MFC动态链接库);开发工具:VS2005。

接下来开始修改代码:

view plaincopy to clipboardprint?

1.修改UDP_CE.CPP的SendData函数为:

bool CUDP_CE::SendData(const char *buf, int len)

{

int nBytes = 0;

int nErrorCode;

nBytes = sendto(m_UDPSocket,buf,len,0,(sockaddr*)&m_RemoteAddr,sizeof(m_RemoteAddr));

if (nBytes==SOCKET_ERROR )

{

nErrorCode = WSAGetLastError();

m_OnUdpError(m_pOwnerWnd,nErrorCode);

return false;

}

return true;

}

当然,不要忘记修改UDP_CE.h的SendData函数声明为:bool SendData(const char *buf, int len);

2.修改UDP_CE.CPP的RecvThread函数为:

。..。..。..。..。..

if (ret 》 0)

{

if (FD_ISSET(pSocket-》m_UDPSocket,&fdRead))

{

tmpAddr.sin_family=AF_INET;

tmpAddr.sin_port = htons(pSocket-》m_RemoteAddr.sin_port);

tmpAddr.sin_addr.s_addr =INADDR_ANY;

tmpRecvLen = sizeof(tmpAddr);

recvBuf = new char[1024];

recvedBuf = new char[1024];

ZeroMemory(recvBuf,1024);

ZeroMemory(recvedBuf,1024);

recvLen = recvfrom(pSocket-》m_UDPSocket,recvBuf, 1024,0,(SOCKADDR*)&tmpAddr,&tmpRecvLen);

if (recvLen == SOCKET_ERROR)

{

iErrorCode = WSAGetLastError();

pSocket-》m_OnUdpError(pSocket-》m_pOwnerWnd,iErrorCode);

break;

}

else if (recvLen == 0)

{

iErrorCode = WSAGetLastError();

pSocket-》m_OnUdpError(pSocket-》m_pOwnerWnd,iErrorCode);

break;

}

else

{

//此处添加解析程序,将接收到的数据解析后,

pSocket-》m_OnUdpRecv(pSocket-》m_pOwnerWnd,recvBuf,recvedBufLen,(SOCKADDR*)&tmpAddr);

delete []recvBuf;

recvBuf = NULL;

delete []recvedBuf;

recvedBuf = NULL;

}

}

3.修改UDPDlg.cpp.CPP的OnUdpCERecv函数为:

CUDPDlg * pDlg;

pDlg = (CUDPDlg*)pWnd;

CEdit *pRecvStrEdit = (CEdit*)pDlg-》GetDlgItem(IDC_EDIT_RECVSTR);

ASSERT(pRecvStrEdit != NULL);

CString strRecv (buf);

pRecvStrEdit-》SetWindowText(strRecv);

4.删除UDP_CE.H,不是必须,但可以节省多余的代码

typedef struct CUDPData

{

char FrameHead[4]; //帧头

DWORD DataPackageLen; //帧长度

char * Buf; //缓冲区数据

char FrameTail[4]; //帧尾

}UDPData;

1.修改UDP_CE.CPP的SendData函数为:

bool CUDP_CE::SendData(const char *buf, int len)

{

int nBytes = 0;

int nErrorCode;

nBytes = sendto(m_UDPSocket,buf,len,0,(sockaddr*)&m_RemoteAddr,sizeof(m_RemoteAddr));

if (nBytes==SOCKET_ERROR )

{

nErrorCode = WSAGetLastError();

m_OnUdpError(m_pOwnerWnd,nErrorCode);

return false;

}

return true;

}

当然,不要忘记修改UDP_CE.h的SendData函数声明为:bool SendData(const char *buf, int len);

2.修改UDP_CE.CPP的RecvThread函数为:

。..。..。..。..。..

if (ret 》 0)

{

if (FD_ISSET(pSocket-》m_UDPSocket,&fdRead))

{

tmpAddr.sin_family=AF_INET;

tmpAddr.sin_port = htons(pSocket-》m_RemoteAddr.sin_port);

tmpAddr.sin_addr.s_addr =INADDR_ANY;

tmpRecvLen = sizeof(tmpAddr);

recvBuf = new char[1024];

recvedBuf = new char[1024];

ZeroMemory(recvBuf,1024);

ZeroMemory(recvedBuf,1024);

与《WINCE上实现UDP通信(100%可行!)》相关列表
电话:400-900-3095
QQ:800152669
库存查询
Copyright(C) 2011-2021 Szcwdz.com 创唯电子 版权所有 备案号:粤ICP备11103613号
专注电子元件代理销售  QQ:800152669  电子邮件:sales@szcwdz.com  电话:400-900-3095