相关程序代码如下:
CString RE="READY",CO="CONTINUE",AC="ACCEPT",OV="OVER"; 
char page[1023],pc;
CString check[2];
int i=0,t=0;
pc=page; //指向字符串,page是通过sock接受到的字符串,客户端是VB做的
while(t!=3)
{
if(t==0&&(*pc!='|'))
{
check[0]=check[0]+(*pc);//取得标示字
pc++;
} if(*pc=='|')
{
t++;
pc++;
} if((strcmp(check[0],RE)!=0)&&(*pc!=-52))
{
check[1]=check[1]+(*pc);//取得文件路径
pc++;
}
else
{
check[1]=check[1]+(*pc);//取得断点续传点
pc++;
} if(t==2&&*pc!=-52)
{
check[2]=check[2]+(*pc);//取得断点续传文件路径
pc++;
} if(*pc==-52)
break;
}
}
运行后,如果客户端发送"READY|admin\web.rar",check[0]接收为RAY,check[1]接受为EDweb.rar,怎样才能让check[0]="READY"以后,check[1]才接收数据。我还试过写成if(check[0]=="READY"……),也是这样,vc++中怎么比较字符串啊?在线等,解决立即给分。

解决方案 »

  1.   

    while下面的一大段不要,直接改为:int nPos;
    check[1]=pc;
    nPos=check[1].Find(RE,0);
    if(nPos>0)
    {
    check[1]=check[1].Right(check[1].GetLength()-nPos-1);
    nPos=check[1].Find(RE,0);
    if(nPos>0)
    {
     check[2]=check[1].Right(check[1].GetLength()-nPos-1);
     check[1]=check[1].Left(nPos);
    }}
      

  2.   

    谢谢你的解答,我刚学用vc++,还以为没有这几个函数,不过我想既然找到了所需的字符串,也知道字符串的长度,用mid()函数应该可以解决了,不过你的程序当中if的条件要改一下,是nPos>=0,字符串开头是0。
    还有,check[1]=check[1].Right(check[1].GetLength()-nPos-1);以后再用nPos=check[1].Find(RE,0);,是找不到RE的,后面的就不会执行了。
    估计我的理解还有问题,不过你的方法比我的要好多了,应该没问题了。