我用svchost启用DLL服务,在servicemain主函数中通过创建线程的方式建立一个功能线程mainfn()
在mainfn()中用了switch..case,但通过调试来看,程序无法执行switch里面的语句!
相关说明如下:欢迎各位大侠指点:
DWORD WINAPI MainFn(LPVOID lpParam)
{
```套接字初始化
connect(sockClient, (SOCKADDR*)&addrClient, sizeof(SOCKADDR));
//定义一个结构体,进行传递文件时要用的。
fileinfo fileinfo1;
fileinfo1.len=0;
fileinfo1.seek=0;
fileinfo1.type=0;
strcpy(fileinfo1.name,"ufile.liz");
//标识,确保完成一次通话
bool FLAG=true;
char sendBuffer[sizeof(fileinfo)];
char recvBuffer[sizeof(fileinfo)];
memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
//发送命令
int aa=sendn(sockClient,sendBuffer,sizeof(fileinfo));
if(aa<0)
{
closesocket(sockClient);
return -1;
} //****从服务端接收情况看,DLL服务程序已经成功运行到此! /********************测试一********************************
//将case里面的代码放在此外,从服务器接收情况是可以成功接收并再次发送的。
//aa=readn(sockClient,recvBuffer,sizeof(fileinfo));
//memcpy(&fileinfo1,recvBuffer,sizeof(fileinfo));
//fileinfo1.type=1;
// memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
// s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
//**************************************************************** while(FLAG)
{
aa=readn(sockClient,recvBuffer,sizeof(fileinfo));
if(aa<0)
{
closesocket(sockClient);
return -1;
} /********************测试二********************************
//将case里面的代码放在此外,从服务器接收情况也是可以成功接收并再次发送的。
//aa=readn(sockClient,recvBuffer,sizeof(fileinfo));
//memcpy(&fileinfo1,recvBuffer,sizeof(fileinfo));
//fileinfo1.type=1;
// memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
// s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
//**************************************************************** switch(fileinfo1.type)
{
//********************测试三************************************
//放在此处,不执行
// fileinfo1.type=1;
//memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
//s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
case 0:
fileinfo1.type=1;
if(!myFile.Open(fileinfo1.name, CFile::modeRead | CFile::typeBinary | CFile::shareDenyNone ))
{return -1;} trslen=myFile.GetLength();
myFile.Close();
fileinfo1.len=trslen;
//******************************************************************
//这是真正要用的地方,照样不执行,根本就不行switch语句!
memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
if(s<0)
{
closesocket(sockClient);
return -1;
}
break;
case 1:
putfile(sockClient,fileinfo1.name,fileinfo1.len,fileinfo1.seek);
break;
case 9:
FLAG=false;
break;
case 2:
fileinfo1.type=2;
if(!myFile.Open(fileinfo1.name, CFile::modeRead | CFile::typeBinary | CFile::shareDenyNone ))
{return -1;}
trslen=myFile.GetLength();
myFile.Close();
if((strncmp(fileinfo1.name,cmpname,100)==0)||(trslen==fileinfo1.len))
{
memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
if(s<0)
{ closesocket(sockClient);
return -1;
}
}
break;
default:
FLAG=false; }
}
closesocket(sockClient);
WSACleanup();
return 0;
}
在mainfn()中用了switch..case,但通过调试来看,程序无法执行switch里面的语句!
相关说明如下:欢迎各位大侠指点:
DWORD WINAPI MainFn(LPVOID lpParam)
{
```套接字初始化
connect(sockClient, (SOCKADDR*)&addrClient, sizeof(SOCKADDR));
//定义一个结构体,进行传递文件时要用的。
fileinfo fileinfo1;
fileinfo1.len=0;
fileinfo1.seek=0;
fileinfo1.type=0;
strcpy(fileinfo1.name,"ufile.liz");
//标识,确保完成一次通话
bool FLAG=true;
char sendBuffer[sizeof(fileinfo)];
char recvBuffer[sizeof(fileinfo)];
memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
//发送命令
int aa=sendn(sockClient,sendBuffer,sizeof(fileinfo));
if(aa<0)
{
closesocket(sockClient);
return -1;
} //****从服务端接收情况看,DLL服务程序已经成功运行到此! /********************测试一********************************
//将case里面的代码放在此外,从服务器接收情况是可以成功接收并再次发送的。
//aa=readn(sockClient,recvBuffer,sizeof(fileinfo));
//memcpy(&fileinfo1,recvBuffer,sizeof(fileinfo));
//fileinfo1.type=1;
// memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
// s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
//**************************************************************** while(FLAG)
{
aa=readn(sockClient,recvBuffer,sizeof(fileinfo));
if(aa<0)
{
closesocket(sockClient);
return -1;
} /********************测试二********************************
//将case里面的代码放在此外,从服务器接收情况也是可以成功接收并再次发送的。
//aa=readn(sockClient,recvBuffer,sizeof(fileinfo));
//memcpy(&fileinfo1,recvBuffer,sizeof(fileinfo));
//fileinfo1.type=1;
// memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
// s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
//**************************************************************** switch(fileinfo1.type)
{
//********************测试三************************************
//放在此处,不执行
// fileinfo1.type=1;
//memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
//s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
case 0:
fileinfo1.type=1;
if(!myFile.Open(fileinfo1.name, CFile::modeRead | CFile::typeBinary | CFile::shareDenyNone ))
{return -1;} trslen=myFile.GetLength();
myFile.Close();
fileinfo1.len=trslen;
//******************************************************************
//这是真正要用的地方,照样不执行,根本就不行switch语句!
memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
if(s<0)
{
closesocket(sockClient);
return -1;
}
break;
case 1:
putfile(sockClient,fileinfo1.name,fileinfo1.len,fileinfo1.seek);
break;
case 9:
FLAG=false;
break;
case 2:
fileinfo1.type=2;
if(!myFile.Open(fileinfo1.name, CFile::modeRead | CFile::typeBinary | CFile::shareDenyNone ))
{return -1;}
trslen=myFile.GetLength();
myFile.Close();
if((strncmp(fileinfo1.name,cmpname,100)==0)||(trslen==fileinfo1.len))
{
memcpy(sendBuffer,&fileinfo1,sizeof(fileinfo));
s=sendn(sockClient,sendBuffer,sizeof(fileinfo));
if(s<0)
{ closesocket(sockClient);
return -1;
}
}
break;
default:
FLAG=false; }
}
closesocket(sockClient);
WSACleanup();
return 0;
}
那你看看在
default:
FLAG=false;
填加一条输出语句~~~
看到底执行没有??
int num;
num=1;
switch(num)都没有用!
我也比较奇怪!
{
//放在此处的代码不会执行
...
case ...
//case后面的语句才会执行
...
}