描述:
char szBuffer[Max_Buffer];
char recvBuffer[Max_Buffer];
//char resetBuffer[6]="S0218";
char result[2];
long dwReturn;
LPSTR pBuffer;
int len=0;
//DWORD uCheckSum;
CString dwIp;
sockaddr_in clientAddr;
sockaddr_in serverAddr;
DWORD dwAddrlength = 0;
SOCKET clientSocket = NULL;
int slength = 0;
int iLength = 0;
int recvLen=0;
int rcvtimeo = TIME_OUT ; // 5 sec
DWORD ret=0;
ZeroMemory(szBuffer,sizeof(szBuffer));
ZeroMemory(recvBuffer,sizeof(recvBuffer));
ZeroMemory(result,sizeof(result));
ZeroMemory(&clientAddr,sizeof(clientAddr));
ZeroMemory(&serverAddr,sizeof(serverAddr));
if(HostPort<1)
{
dwReturn=95;
}
else
{
pBuffer=szBuffer;
strcpy(pBuffer,"S");
pBuffer++;
len=4+2;
sprintf(pBuffer,"%02d",len);
pBuffer+=2;
strcpy(pBuffer,"13");
pBuffer+=2;
sprintf(pBuffer,"%04d",HostPort);
pBuffer+=4;
//len=1+2+2+15;
//uCheckSum=CheckSum(pBuffer,len);
//sprintf(pBuffer,"%02x",uCheckSum);
//Send Data
dwIp=GetIP(m_RemoteIp);
if(clientSocket==NULL)
{
clientSocket = socket(AF_INET, SOCK_DGRAM, 0);
ASSERT(clientSocket!=NULL);
}
clientAddr.sin_addr.S_un.S_addr=inet_addr(dwIp);
clientAddr.sin_family=AF_INET;
clientAddr.sin_port=htons(m_RemotePort);
serverAddr.sin_addr.S_un.S_addr=INADDR_ANY;
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=htons(m_RemotePort);
ret=bind(clientSocket,(LPSOCKADDR)&serverAddr,sizeof(serverAddr));
if(ret==SOCKET_ERROR)
{
dwReturn=97;
goto DoEnd;
}
iLength=1+2+2+4;
slength=sendto(clientSocket,szBuffer,iLength,0,(LPSOCKADDR)&clientAddr,sizeof(clientAddr));
if((slength!=iLength)||(slength==SOCKET_ERROR))
{
dwReturn=99;
goto DoEnd;
}
if(setsockopt(clientSocket,SOL_SOCKET,SO_RCVTIMEO,(const char*)&rcvtimeo,sizeof(rcvtimeo))==SOCKET_ERROR)
{
dwReturn=99;
goto DoEnd;
}
slength = recvfrom(clientSocket,recvBuffer,Max_Buffer,0,(LPSOCKADDR)&clientAddr,&recvLen);
if ((slength==0)||(slength==SOCKET_ERROR))
{
dwReturn = 97;
goto DoEnd;
}
//Data...
memcpy(result,recvBuffer+5,1);
if(strcmp((char*)result,"0")==0)
{
dwReturn = 0;
goto DoEnd;
}
else
{
if(strcmp((char*)result,"1")==0)
{
memcpy(result,recvBuffer+5,1);
dwReturn =98;
goto DoEnd;
}
else
{
dwReturn = 98;
goto DoEnd;
}
}
}
DoEnd:
if(clientSocket!=NULL)
{
closesocket(clientSocket);
clientSocket=NULL;
}
return dwReturn;