关于WSASend一个小问题

sdgzhk 2005-05-09 02:14:06
是这样的,我以前用了WSAAsyncSelect写过一个服务器/客户机,发送和接收都是用Send /Recv,最近在学完成端口,服务器写完了,想调试一下(主要是懒得写客户端),所以用回之前的客户端做测试,但是却收不到数据。我完成端口的服务器是用WSASend 发送的,Winsock的全部内容我都是收集大量乱七八糟的资料而来,所以有些概念很模糊的。
检查过应该没什么问题,不知道有没这个可能?那就是用WSASend 发送的要用WSARecv接收?
多谢帮忙!!!
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdgzhk 2005-05-11
  • 打赏
  • 举报
回复
再顶一下,希望有人帮忙。昨晚到现在翻来覆去检查每一步,最后发现我在接收线程中用PostQueuedCompletionStatus通知线程池,并激活一个线程的时候,完成键中的socket竟然丢失了。
描述一下吧:
我主程序时开了M个线程,让他们都在GetQueuedCompletionStatus那里阻塞着。
然后另开一条Accept线程接收客户连接申请,并让其在accept函数那儿。
然后如果有客户端要求连接,accept接受请求,处理后就用PostQueuedCompletionStatus激活其中一条线程。问题就出在这里,以上都检查过,完成端口/套接字等在这以前都非常正常,直到进入了GetQueuedCompletionStatus的线程后,套接字就丢失了。奇怪!!!
sdgzhk 2005-05-10
  • 打赏
  • 举报
回复
自己顶,最后发现,无论怎样都会报10038错误。查了一下,听说对OVERLAPPED结构清零可以,但实际试过还是不行。有没高手指教指教?先多谢了。
sdgzhk 2005-05-09
  • 打赏
  • 举报
回复
先多谢 nuaawenlin(飘人)
对呀,最后发现,原来发送出错,但不知原因。
主要表现:编译无错,运行也无错,
设置了IError=WSASend(lpContext->m_nSocket,&lpContext->m_wsaOutBuffer,1,&lpContext->m_wsaOutBuffer.len,MSG_PARTIAL,&pOverlap->ol,NULL);
发现IError == SOCKET_ERROR的。晕死!!
其中pOverlap->ol就是WSAOVERLAPPED结构。
其中lpContext->m_wsaOutBuffer是WSABUF结构。
nuaawenlin 2005-05-09
  • 打赏
  • 举报
回复
没有必要呀

检查发送端是否发送出错了
nuaawenlin 2005-05-09
  • 打赏
  • 举报
回复
没有必要呀

检查发送端是否发送出错了

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧