奇怪的问题,高手请进!!!

liu_jc 2004-12-13 07:10:49
我用winsocket写了一段程序,代码大致如下:
while(rt)
{
rval=send(ss,buf,length,0);
......
rval=recv(ss,buf,256,0);
......
rt--;
}
在执行debug跟踪时可以循环执行,但是单独执行时只循环了一次救出现错误。socket设置了超时,阻塞模式。
...全文
115 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hohai 2004-12-14
  • 打赏
  • 举报
回复
是不是buff在另一个线程中也用,你加了同步机制,另一个线程占用时间过长,查查同步问题
hyamw 2004-12-14
  • 打赏
  • 举报
回复
你可以看看按下F5以后,用TRACE输出一下错误信息,能不能发现错误。如果不行,就写日志文件吧。还有一个问题,你那个send()和recv()函数中socket s是全局变量?也就是说只有一个?而用的多线程对一个socket访问吗?
hyamw 2004-12-14
  • 打赏
  • 举报
回复
debug下面的容错能力强,很多错误不会报告的。
出现的错误是什么?
liu_jc 2004-12-14
  • 打赏
  • 举报
回复
在debug下可以接收
HunterForPig 2004-12-14
  • 打赏
  • 举报
回复
buff够大吗,有256?
要清空buff
memset(buff,0,256);
oyljerry 2004-12-13
  • 打赏
  • 举报
回复
rval=recv(s,buff,256,0);
这里能接受下吗?
liu_jc 2004-12-13
  • 打赏
  • 举报
回复
有,在recv和send前都有这句话。
while(rt)
{
flag=SendCommand(command,no);
flag=ReceiveData();
rt--;
}
int SSHComm::SendCommand(char* cmdstr,CString no) // 发送命令
{
int flag=0;
int c=3;
while(c>0)
{
memset(buff,0,sizeof(buff));
flag=send(s,cmdstr,m_len,0); //m_len在别的方法中得到
if(flag==SOCKET_ERROR)
{
m_len=0;
c--;
}
else
break;
}
if(c==0 && flag==SOCKET_ERROR)
{
return 0;
}
return 1;
}
int SSHComm::ReceiveData() //接受数据
{
int flag=MSG_OOB;
int rval;
memset(buff,0,sizeof(buff));
rval=recv(s,buff,256,0);
if(rval==SOCKET_ERROR)
return 0;
m_len=rval;
return 1;
}
qq_13939330 2004-12-13
  • 打赏
  • 举报
回复
代码贴的不全,只能这样猜测!buf中的内容有没定时清掉??如
while( rt )
{
rval=send(ss,buf,length,0);
......

memset(buf, 0, 256); //-------------有这一句吗?
rval=recv(ss,buf,256,0);
printf("%d\n",WSAGetLastError());
Sleep(1000);
rt--;


}
liu_jc 2004-12-13
  • 打赏
  • 举报
回复
加上sleep没有任何的效果。这个程序是多线程的。
3m2u 2004-12-13
  • 打赏
  • 举报
回复
那就编译成release啊.运行的时候就可以看错误代码了啊
liu_jc 2004-12-13
  • 打赏
  • 举报
回复
你的意思是加上WSAGetLastError,不过没用啊,在bebug下不会出现错误的。接收的数据不会超过256的,可以肯定。加上sleep可以试试
3m2u 2004-12-13
  • 打赏
  • 举报
回复
while(rt)
{
rval=send(ss,buf,length,0);
......
rval=recv(ss,buf,256,0);//要接收的数据只有这么多么?如果超过256要循环的

printf("%d\n",WSAGetLastError());
Sleep(1000);
rt--;
}
liu_jc 2004-12-13
  • 打赏
  • 举报
回复
没有别的代码了,很简单的,就是这些。没有任何其它的代码了,就是简单的发送接收。debug可以正常运行。单独执行只能循环一次。
HunterForPig 2004-12-13
  • 打赏
  • 举报
回复
把代码贴上来

18,356

社区成员

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

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