服务端发送:
for(iter=SocketMessage.begin();iter!=SocketMessage.end ();iter++)
{
                       CLSLOG2( " 服务端发送的x坐标:%3d\n",iterp->second.packetHdr.pos.x );  生成服务端日志文件
iterp->second.packetHdr.type='B';
nErrCode=send(iter->first, (char*)&iterp->second,sizeof(iterp->second), 0);//发送数据类型
if(nErrCode=SOCKET_ERROR)
{
return ;
}

//send(iter->first, (char*)&iterp->second.sock,sizeof(iterp->second.sock), 0);
}
}客户端接收: int nTotalLen=0;
int nReadLen;
char recvbuf[1024];
memset(recvbuf,0,sizeof(recvbuf));
nReadLen=recv(wParam,(char*)&recvbuf,sizeof(recvbuf),0);
while(nTotalLen<sizeof(recvbuf))
{
nReadLen=recv(wParam,(char*)&recvbuf,1,0); if(nReadLen==SOCKET_ERROR)
{
 if (WSAGetLastError() == WSAEWOULDBLOCK)
 {
  break;
 }
 else // another error
 {
 return ;
 }
}                                           
else if(nReadLen==0)
{
Sleep(100); 

nTotalLen+=nReadLen;
} memcpy(&m_MayiClient.pHdr,recvbuf,sizeof(m_MayiClient.pHdr));//接收数据给m_MayiServer.pHdr
if(m_MayiClient.pHdr.type=='B')
{
CLSLOG2( "客户端接收数据x坐标:%3d\n",m_MayiClient.pHdr.pos.x);       生成日志文件
m_MayiClient.SaveSocketMessage(); }查看文件服务端日志:产生了很多行,客户端:只产生几行。产生的文件感觉服务端正常。而客户端接收的数据接收不正常好像卡在那里啦!

解决方案 »

  1.   

    把服务器的建立的地址及客户端连接的地址都为127.0.0.0,这样可以在客户端程序里的接收函数recv设置断点,可以跟踪服务端是否成功发送出数据,这样就可以定位错误了。
      

  2.   

    别的不说;先看你写的下面的部分;
    while(nTotalLen <sizeof(recvbuf))nReadLen=recv(wParam,(char*)&recvbuf,1,0); nTotalLen+=nReadLen; 我算着,这个nTotalLen初值是0,满足while(nTotalLen <sizeof(recvbuf)),可是接收到数据后,一直在加,所以这个条件就不成立了,自然就不能接收数据了;