首先讲解一下,研发平台:WINCE4.2(WINCE5.0也限于,因为用于了静态编译器MFC动态链接库);开发工具:VS2005。 接下来开始改动代码: viewplaincopytoclipboardprint? 1.改动UDP_CE.CPP的SendData函数为: boolCUDP_CE::SendData(constchar*buf,intlen) { intnBytes=0; intnErrorCode; nBytes=sendto(m_UDPSocket,buf,len,0,(sockaddr*)m_RemoteAddr,sizeof(m_RemoteAddr)); if(nBytes==SOCKET_ERROR) { nErrorCode=WSAGetLastError(); m_OnUdpError(m_pOwnerWnd,nErrorCode); returnfalse; } returntrue; } 当然,不要记得改动UDP_CE.h的SendData函数声明为:boolSendData(constchar*buf,intlen); 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=newchar[1024]; recvedBuf=newchar[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; } elseif(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); CStringstrRecv(buf); pRecvStrEdit-》SetWindowText(strRecv); 4.移除UDP_CE.H,不是必需,但可以节省多余的代码 typedefstructCUDPData { charFrameHead[4];//帧头 DWORDDataPackageLen;//帧长度 char*Buf;//缓冲区数据 charFrameTail[4];//帧尾 }UDPData; 1.改动UDP_CE.CPP的SendData函数为: boolCUDP_CE::SendData(constchar*buf,intlen) { intnBytes=0; intnErrorCode; nBytes=sendto(m_UDPSocket,buf,len,0,(sockaddr*)m_RemoteAddr,sizeof(m_RemoteAddr)); if(nBytes==SOCKET_ERROR) { nErrorCode=WSAGetLastError(); m_OnUdpError(m_pOwnerWnd,nErrorCode); returnfalse; } returntrue; } 当然,不要记得改动UDP_CE.h的SendData函数声明为:boolSendData(constchar*buf,intlen); 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=newchar[1024]; recvedBuf=newchar[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; } elseif(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); CStringstrRecv(buf); pRecvStrEdit-》SetWindowText(strRecv); 4.移除UDP_CE.H,不是必需,但可以节省多余的代码 typedefstructCUDPData { charFrameHead[4];//帧头 DWORDDataPackageLen;//帧长度 char*Buf;//缓冲区数据 charFrameTail[4];//帧尾 }UDPData;还可以移除窗体上发送到、接管数字的编辑框等,因为实际应用于中用不上。
本文来自CSDN博客,刊登请求标明原文:http://blog.csdn.net/hellogv/archive/2007/11/10/1878355.。
本文来源:免费pg电子游戏麻将-www.hxsound.com