socket 奇怪的有关问题,哪位大侠帮忙解决下

socket 奇怪的问题,哪位大侠帮忙解决下~socket客户端接受一个结构体,显示的接受字节数为0,可通过printf输

socket 奇怪的问题,哪位大侠帮忙解决下~
socket客户端接受一个结构体,显示的接受字节数为0,可通过printf输出到控制台上又有数据,感觉很诡异,不知道哪错了,客户端代码如下:
#include<Winsock2.h>
#include<stdio.h>
#include<time.h>
struct MyvalueBlock
{
int id;
float value;
};
void main()
 {
WORD wVersionRequested;
WSADATA wsaData;
int err;
 
wVersionRequested = MAKEWORD(2, 2 );
 
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
 

 
if ( LOBYTE( wsaData.wVersion ) != 2||
HIBYTE( wsaData.wVersion ) != 2) {  
WSACleanup( );  
return; 
}
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(700);
int l;
  if((l=connect(sockClient,(sockaddr *)&addrSrv,sizeof(sockaddr)))==SOCKET_ERROR)
{  
printf( "Failed to connect.\n" );
WSACleanup();
return;
}  
int Recvbyte;
send(sockClient,"hello",strlen("hello")+1,0);
MyvalueBlock *value = new MyvalueBlock[4000];
if(Recvbyte=recv(sockClient,(char *)value,sizeof(MyvalueBlock)*4000,0) == SOCKET_ERROR)
{
printf("接受失败!");
}

if(Recvbyte==0||Recvbyte ==WSAECONNRESET)
{
printf( "Connection Closed.\n");
  WSACleanup();
}
for(int i=4000-200;i<4000;i++) 
{
printf("%d, %f\n",value[i].id,value[i].value);
}
delete[] value;
closesocket(sockClient);
WSACleanup();

}

服务端传输过来的结构体是
struct MyvalueBlock
{
int id;
float value;
};
我给幅值
for(int i=0;i<4000;i++)
{
value[i].id = i;
value[i].value = i*2.0;
}
传到客户端在控制台上显示的数据是对的,可显示收到的字节数总是0个字节。。

[解决办法]
加括号
if((Recvbyte=recv(sockClient,(char *)value,sizeof(MyvalueBlock)*4000,0)) == SOCKET_ERROR)
[解决办法]
LS已经该对了

Recvbyte=recv(sockClient,(char *)value,sizeof(MyvalueBlock)*4000,0) == SOCKET_ERROR

LZ你这样其实写其实是受到了数据的,所以结果肯定不等于SOCKET_ERROR,recvbyte当然就为0咯,运算符优先级的问题