void CMS_simulateDoc::SendCmd(smg::CCommand &cmd)
{
BYTE sndBuf[4096]; strcpy(cmd.m_body.cmdDeliver.szPwd,m_szPwd ) ;        //add by blueocean 2003/08/20

int sndlen = cmd.Encode( sndBuf );
UINT sendByte = m_pSocket->SendTo(sndBuf,sndlen,m_Port,m_Server);/*
int nError =GetLastError() ;
CString str ;
str.Format("%d",nError) ;
AfxMessageBox( str ) ;
*/
if(sendByte <= 0)
{
CString info ;
UINT errorCode = GetLastError();
info.Format("不能发送到%s : %d,错误代码%d",m_Server,m_Port,errorCode);
UpdateInfo(info);
}
}以上代码在服务端ip或port不正确时sendto的返回值都是正确的值,用GetLastError()返回的值也为0,有没有别的办法判断是否对方已正确收到信息

解决方案 »

  1.   

    如果没有返回SOCKET_ERROR就表示发送成功,至于对方是否受到则需要返回一个受到信息
      

  2.   

    怎么判断是否接收成功了呢。我在接收时WSAGetlasterror总是有错10014,是什么原因
      

  3.   

    没法判断,除非你先BIND一下,但这样也不能确保,BIND只能保证假如你发送的对方端口和机器不存在的返回。
    换句话说,假如你BIND,然后再SEND。只要对方机器上这个UDP套接口开着的,就会返回成功了(出错其实是一个ICMP信文包的返回)
      

  4.   

    SendTo
    返回值大于0就是发送成功
      

  5.   

    sendto仅仅是COPY到套接字缓冲区里面去,然后朝网卡上一丢,什么事情也不管.