首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于SendTo函数的返回值有关问题

2012-04-14 
关于SendTo函数的返回值问题最近在做一个UDP的聊天程序,但是对SendTo函数的返回值有点不太清楚,我查过MSDN

关于SendTo函数的返回值问题
最近在做一个UDP的聊天程序,但是对SendTo函数的返回值有点不太清楚,我查过MSDN,了解到他如果发送不成功就会返回一个SOCKET_ERROR,以下是一个enter 按钮的代码,问题出在这里,当我没有打开服务器的时候SendTo返回 0, 当打开服务器的时候也是返回 0, 我觉得当服务器没有打开的话,他就不会发送成功,应该返回 -1 才对,对此我有点困惑,希望朋友们能告诉我其中的原理!谢谢




void CMChartRoom_UDP_ClientDlg::OnBnClickedButtonEnterroom()
{

UpdateData(TRUE);
CString strEnterMsg;
int nSend;

nSend=m_pClientSock->SendTo(
(LPCTSTR)strEnterMsg,
strEnterMsg.GetLength(),
m_ServerAddr.uiPort,
m_ServerAddr.strIPAddr
);

if (nSend==SOCKET_ERROR )
{

AfxMessageBox(_T("进入聊天室失败,可能服务器端还没有运行"));
return;
}

this->GetDlgItem(IDC_BUTTON_ENTERROOM)->EnableWindow(FALSE);
this->GetDlgItem(IDC_BUTTON_LEAVEROOM)->EnableWindow(TRUE);
this->GetDlgItem(IDC_BUTTON_SENDMSG)->EnableWindow(TRUE);
((CEdit*)this->GetDlgItem(IDC_EDIT_SENDMSG))->SetReadOnly(FALSE);
((CEdit*)this->GetDlgItem(IDC_EDIT_SERVERIP))->SetReadOnly(TRUE);
((CEdit*)this->GetDlgItem(IDC_EDIT_SERVERPORT))->SetReadOnly(TRUE);
m_bEnterRoom=TRUE;

}

[解决办法]
The successful completion of a SendTo does not indicate that the data has been successfully delivered.
[解决办法]
你取WSAGetLastError.看看啊,发送成功应该返回的是发送的字节数。

除非你发送的buf指定的长度是0才返回0
[解决办法]

探讨
引用:
你取WSAGetLastError.看看啊,发送成功应该返回的是发送的字节数。

除非你发送的buf指定的长度是0才返回0



对的,我看了一下的确返回字节数,但是问题是我还没有打开服务器呀,照理来说他应该失败,怎么会发送成功啊。。。。郁闷

[解决办法]
你要用tcp连接方式,udp的本来就是无连接的,不保证通讯的。

[解决办法]
做一个登陆过程,也就是你需要等待服务器给你返回结果,如果一段时间都没有,就认为不通。
[解决办法]
用tcp做吧
[解决办法]
UDP是无连接的,你是不会知道是否成功的。

热点排行