socket为什么收不到数据,在线等,急!

cnpeople 2003-08-22 09:17:18
在一个发送线程内,如果用以下代码发送,接受端怎么也收不到数据
CFile file;
byte m_sendBuffer[4096]; //for async send

int m_nBytesBufferSize;
if(!file.Open(pThread->strSoureFilePath,CFile::modeRead ))
{
AfxMessageBox("文件打开失败");
return;
}

m_nBytesBufferSize=file.Read((void *)m_sendBuffer,1096);
while(m_nBytesBufferSize>0)
{
int i=pThread->pSocket->Send(m_sendBuffer,m_nBytesBufferSize);

m_nBytesBufferSize=file.Read((void *)m_sendBuffer,1096);

}
file.Close();
但是如果换成下面的代码,就可以收到了
while(1)
pThread->pSocket->Send("test",4);

其中pThread是当前线程指针,请问是什么原因造成的?

...全文
70 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnpeople 2003-08-23
  • 打赏
  • 举报
回复
真是不好意思,能不能具体说一下你遇到的情形!我查了半天也没查到问题的所在,现在都快急疯了
cnpeople 2003-08-22
  • 打赏
  • 举报
回复
flagfly 你好!什么情况下会造成死锁?
mme 2003-08-22
  • 打赏
  • 举报
回复
每发送一个包就让它Sleep(10);
还是不行就跟踪它发包的过程,很容易看到问题的原因D.
flagfly 2003-08-22
  • 打赏
  • 举报
回复
你的文件一定很大吧。换一个小的文件,小于1096字节,即一次全读出来,再试一试。
如果接收端的程序设计得不好,它会等发送端全部发完再开始接收,容易造成死锁。
cnpeople 2003-08-22
  • 打赏
  • 举报
回复
读多少字节应该没有关系吧?我发的时候也是发了1096
fanfyj 2003-08-22
  • 打赏
  • 举报
回复
不太清楚,应该是读出文件数据环节出错了
byte m_sendBuffer[4096];
为什么程序中只读了1096????
m_nBytesBufferSize=file.Read((void *)m_sendBuffer,1096);
mfc168 2003-08-22
  • 打赏
  • 举报
回复
gz
cnpeople 2003-08-22
  • 打赏
  • 举报
回复
补充一下:那个文件跟踪发现已经打开,并且已经读出了数据,接收端是在OnReceive里跟踪的!
flagfly 2003-08-22
  • 打赏
  • 举报
回复
或许这种情况不能叫死锁。
我曾经遇到过这种情况,直到发送结束后,才开始接收。如果发送停在断点
上,则一直没有接收。如果你发送的数据巨多,造成服务器接收buffer满,
可能就会收不到。
建议检查服务器的设计模式。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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