我用winsocket写了一段程序,代码大致如下:
while(rt)
{
rval=send(ss,buf,length,0);
......
rval=recv(ss,buf,256,0);
......
rt--;
}
在执行debug跟踪时可以循环执行,但是单独执行时只循环了一次救出现错误。socket设置了超时,阻塞模式。
while(rt)
{
rval=send(ss,buf,length,0);
......
rval=recv(ss,buf,256,0);
......
rt--;
}
在执行debug跟踪时可以循环执行,但是单独执行时只循环了一次救出现错误。socket设置了超时,阻塞模式。
{
rval=send(ss,buf,length,0);
......
rval=recv(ss,buf,256,0);//要接收的数据只有这么多么?如果超过256要循环的printf("%d\n",WSAGetLastError());
Sleep(1000);
rt--;
}
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--;
}
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;
}
这里能接受下吗?
出现的错误是什么?
要清空buff
memset(buff,0,256);