使用完成端口通信,服务端使用WSASend发送响应数据时,出现10014错误,显示参数错误,但是经过检验,所有参数都是正确的。实在找不出问题了,求助。
代码为响应IOWrite的函数。
DWORD ulFlags = MSG_PARTIAL;
DWORD dwByteSend;
pContext->m_WriteBuffer.Delete(dwIoSize);//dwIoSize为上次发送完的数据
if (pContext->m_WriteBuffer.GetBufferLen() == 0)
{
pContext->m_WriteBuffer.ClearBuffer();
SetEvent(pContext->m_hWriteComplete);//让其他线程可以投递写操作
return true;
}
else
{
OVERLAPPEDPLUS * pOverlap = new OVERLAPPEDPLUS(IOWrite); pContext->m_wsaOutBuffer.buf = (char*) pContext->m_WriteBuffer.GetBuffer();
pContext->m_wsaOutBuffer.len = pContext->m_WriteBuffer.GetBufferLen(); //数据发送处
int nRetVal = WSASend(pContext->m_Socket,
&pContext->m_wsaOutBuffer,
1,
&dwByteSend,
ulFlags,
&pOverlap->m_ol,
NULL);
int nLastError = WSAGetLastError();
if ( nRetVal == SOCKET_ERROR && nLastError != WSA_IO_PENDING )
{
CString str;
str.Format("OnClientWriting IO ERROR:%d",WSAGetLastError());
MessageBox(m_pFrame->m_hWnd, str.GetBuffer(0), "断开", MB_OK);
RemoveClient( pContext, FALSE );
}
}
代码为响应IOWrite的函数。
DWORD ulFlags = MSG_PARTIAL;
DWORD dwByteSend;
pContext->m_WriteBuffer.Delete(dwIoSize);//dwIoSize为上次发送完的数据
if (pContext->m_WriteBuffer.GetBufferLen() == 0)
{
pContext->m_WriteBuffer.ClearBuffer();
SetEvent(pContext->m_hWriteComplete);//让其他线程可以投递写操作
return true;
}
else
{
OVERLAPPEDPLUS * pOverlap = new OVERLAPPEDPLUS(IOWrite); pContext->m_wsaOutBuffer.buf = (char*) pContext->m_WriteBuffer.GetBuffer();
pContext->m_wsaOutBuffer.len = pContext->m_WriteBuffer.GetBufferLen(); //数据发送处
int nRetVal = WSASend(pContext->m_Socket,
&pContext->m_wsaOutBuffer,
1,
&dwByteSend,
ulFlags,
&pOverlap->m_ol,
NULL);
int nLastError = WSAGetLastError();
if ( nRetVal == SOCKET_ERROR && nLastError != WSA_IO_PENDING )
{
CString str;
str.Format("OnClientWriting IO ERROR:%d",WSAGetLastError());
MessageBox(m_pFrame->m_hWnd, str.GetBuffer(0), "断开", MB_OK);
RemoveClient( pContext, FALSE );
}
}
解决方案 »
- VC 对话框 getnextwindow
- 郁闷、急切中!!如何检测PPT放映时里的画画工具是否安装?
- 实现类似IE的按编码显示的功能
- 关于解码器协议!参与者有分!
- 如何在MFC EXE工程中入回调函数
- 为何在Win98下面DoModal()没有反应?
- 硕士(非计算机)到北京搞软件,多少钱合适?
- VC++编程时出现“在调用SQLFetchScroll/SQLExtendedFetch之前,没有列被绑定”。。做作业出现的问题,帮帮忙看看。谢啦
- Direct UI 开发MFC应用程序的问题
- 怎么样使用PROGRESS控制,我是说用SDK,不能用MFC
- 双缓冲技术的实现,在图像处理程序中,在dib上进行了一些标记操作,闪烁的厉害,如何用双缓冲克服,
- 定义IHTMLElement使用以后用不用release?
WSAEFAULT The lpBuffers, lpNumberOfBytesSent, lpOverlapped, or lpCompletionRoutine argument is not totally contained in a valid part of the user address space.
lz还是仔细检查一下这四个参数吧
&pContext->m_wsaOutBuffer,
1,
&dwByteSend,
ulFlags,
&pOverlap->m_ol,//这里有参数
NULL); //这个参数是否能为空?
这个和我那个不一样啊,我的是WSASend返回10014错误,而不是的WSARecv出现这个错误。