我有一个需要使用 VC++ CAsyncSocket 进行 TCP 连接的 Qt 程序。我创建了一个dll。包装 CAsyncSocket。
class CClientSocket ;
class __declspec(dllexport) CClientSocketEx
{
public:
CClientSocketEx();
~CClientSocketEx();
void Close();
bool Create();
bool Connect(const char* lpszHostAddress, unsigned int nHostPort);
int Send(const char* lpBuf, int nBufLen, int nFlags = 0);
bool GetPeerName(char* rPeerAddress, int length, unsigned int& rPeerPort);
int Receive(void* lpBuf, int nBufLen, int nFlags = 0);
private:
CClientSocket* clientSocket;
};
class CClientSocket : public CAsyncSocket
{
virtual void OnReceive(int nErrorCode);
};
void CClientSocket::OnReceive(int nErrorCode)
{
if (!AfxSocketInit())
{
AfxMessageBox(_T("Failed to Initialize Sockets"), MB_OK | MB_ICONSTOP);
}
CString mesage(_T("CClientSocket::OnReceive nErrorCode: %d"), nErrorCode);
logMessage(mesage);
CAsyncSocket::OnReceive(nErrorCode);
}
我遇到的问题是 CAsyncSocket::OnRecieve 从未被调用过。
此外,如果我在不等待 OnRecieve 的情况下调用 CAsyncSocke::Recieve,则会收到 WSAEWOULDBLOCK 错误。
当我在自己的 PC 上进行单元测试时,一切正常。当我在客户端机器上尝试时,我遇到了上述问题。连接和发送命令一切正常,我被告知硬件正在发送回复,但没有 OnRecieve 事件。