CAsyncSocket::ReceiveFrom()
-
Hallo!
Ich habe ein kleines Problem mit der Funktion ReceiveFrom() bzw. ReceiveFromEx() in der Klasse CAsyncSocket: Sobald ich einen Datensatz erhalte, versucht die Funktion den NetBIOS-Namen des Absenders herauszubekommen. Dieser antwortet jedoch nicht darauf (warum das so ist, weiß ich selber nicht so genau, es ist ein Android-Tablet). Das Problem daran ist, dass der Spaß 3 Mal wiederholt wird, bis ReceiveFrom() endlich returned. Ich benötige allerdings auch die Funktion, um Absender-IP und -Port abzufragen. Das Problem tritt nicht mit Receive() auf!
Meine Frage ist jetzt, ob ich der Klasse CAsyncSocket oder der Funktion ReceiveFrom() irgendwie sagen kann, dass nicht nach dem NetBIOS-Namen gefragt werden soll, den brauche ich nämlich gar nicht?
Angehängt habe ich ein Wireshark-Screenshot des beschriebenen Problems. Es vergehen immerhin fast 5 Sekunden, bis der PC (192.168.1.50) auf die Anfrage des Tablets (192.168.1.57) antwortet. Das ist mir zu lang!
Hier der Code:
// CUdpSocket ist von CAsyncSocket abgeleitet CUdpSocket::CUdpSocket(CNetCtrl *pcNetCtrl) : CAsyncSocket(), m_pcNetCtrl(pcNetCtrl), m_u4BytesToSend(0), m_u4BytesSent(0), m_u4RemotePort(0), m_pchSendBuffer(NULL) { if(!Create(pcNetCtrl->GetLocalPortNo(), SOCK_DGRAM)) { CString sError; sError.Format(pNetCtrl->LoadString(IDS_ERR_UDP_CREATE_CONN) + _T(" : %d"), GetLastError()); AfxMessageBox(sError); } } // [...] void CUdpSocket::OnReceive(int s4ErrorCode) { const unsigned int cu4BufLen = 4096; char chBuffer[cu4BufLen]; CString sRemoteHostAddress; UINT u4RemoteSocketPort = 0; int s4Read = ReceiveFromEx(chBuffer, cu4BufLen, sRemoteHostAddress, u4RemoteSocketPort); if(s4Read == 0) Close(); else if(s4Read == SOCKET_ERROR) { CString sError; sError.Format(pNetCtrl->LoadString(IDS_ERR_UDP_RECEIVE) + _T(" : %d"), GetLastError()); AfxMessageBox(sError); } else pNetCtrl->ProcessUdpMessage(chBuffer, s4Read, sRemoteHostAddress, u4RemoteSocketPort); CAsyncSocket::OnReceive(s4ErrorCode); }
Es wäre super, wenn mir jemand einen Tip geben könnte, wie ich das Probem beheben könnte!
-