WINCEでUDP通信を実現する(100%実行可能!)
本論文はhttp://blog.csdn.net/hellogv/から来ている.
まず紹介します.開発プラットフォーム:WINCE 4.2(WINCE 5.0も適用されます.MFCダイナミックリンクライブラリを静的にコンパイルしたので).開発ツール:VSS 2005.
以下のコードは中国水利水電出版社(wwww.waterpb.com.cn)の『EVC高級プログラミングと応用開発』から来ています.WINCEのUDP通信を実現するには、まず水力発電出版社に行って元のUDPプログラミングコードをダウンロードしてください.もちろん、あなたが修正を怠ったら、私が作ったインスタンスコードをhttp://download.csdn.net/source/282307に直接ダウンロードしてもいいです.
コードの変更を開始します.
まず紹介します.開発プラットフォーム:WINCE 4.2(WINCE 5.0も適用されます.MFCダイナミックリンクライブラリを静的にコンパイルしたので).開発ツール:VSS 2005.
以下のコードは中国水利水電出版社(wwww.waterpb.com.cn)の『EVC高級プログラミングと応用開発』から来ています.WINCEのUDP通信を実現するには、まず水力発電出版社に行って元のUDPプログラミングコードをダウンロードしてください.もちろん、あなたが修正を怠ったら、私が作ったインスタンスコードをhttp://download.csdn.net/source/282307に直接ダウンロードしてもいいです.
コードの変更を開始します.
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;
フォームから送信された数値を受信する編集枠なども削除できます.実際のアプリケーションでは使えないからです.