我用winsocket写了一段程序,代码大致如下:
while(rt)
{
rval=send(ss,buf,length,0);
......
rval=recv(ss,buf,256,0);
......
rt--;
}
在执行debug跟踪时可以循环执行,但是单独执行时只循环了一次救出现错误。socket设置了超时,阻塞模式。

解决方案 »

  1.   

    没有别的代码了,很简单的,就是这些。没有任何其它的代码了,就是简单的发送接收。debug可以正常运行。单独执行只能循环一次。
      

  2.   

    while(rt)
    {
    rval=send(ss,buf,length,0);
    ......
    rval=recv(ss,buf,256,0);//要接收的数据只有这么多么?如果超过256要循环的printf("%d\n",WSAGetLastError());
    Sleep(1000);
    rt--;
    }
      

  3.   

    你的意思是加上WSAGetLastError,不过没用啊,在bebug下不会出现错误的。接收的数据不会超过256的,可以肯定。加上sleep可以试试
      

  4.   

    那就编译成release啊.运行的时候就可以看错误代码了啊
      

  5.   

    加上sleep没有任何的效果。这个程序是多线程的。
      

  6.   

    代码贴的不全,只能这样猜测!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--;
    }
      

  7.   

    有,在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;
    }
      

  8.   

    rval=recv(s,buff,256,0);
    这里能接受下吗?
      

  9.   

    debug下面的容错能力强,很多错误不会报告的。
    出现的错误是什么?
      

  10.   

    你可以看看按下F5以后,用TRACE输出一下错误信息,能不能发现错误。如果不行,就写日志文件吧。还有一个问题,你那个send()和recv()函数中socket s是全局变量?也就是说只有一个?而用的多线程对一个socket访问吗?
      

  11.   

    是不是buff在另一个线程中也用,你加了同步机制,另一个线程占用时间过长,查查同步问题
      

  12.   

    buff够大吗,有256?
    要清空buff
    memset(buff,0,256);