Socket客户端,主线程中connect和send,另开一个线程专用于recv,debug版一切正常,但release版recv得不到正确的数据,但我用抓包工具看到的数据明明是正常的,和debug版时一样,就是release的recv获取不到这个数据.
主要代码如下:
bool CBillClientApp::ConnectToServer()
{
sockaddr_in m_addr; if(m_sock != NULL)
{
closesocket(m_sock);
m_sock = NULL;
} if(m_sock == NULL)
{
m_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
} m_addr.sin_family = AF_INET;
m_addr.sin_addr.s_addr = inet_addr(m_sIP);
m_addr.sin_port = htons(m_uPort); int ret = 0;
ret = connect(m_sock, (LPSOCKADDR)&m_addr, sizeof(m_addr));
if(ret == SOCKET_ERROR)
{
printf("连接失败");
closesocket(m_sock);
//WSACleanup();
return false;
}
        CWinThread *g_Thread = new CWinThread((AFX_THREADPROC)ThreadServer,(LPVOID)(this));
if(!g_Thread->CreateThread())
{
CloseConnect();
return false;
} return true;
}//与服务器端连接线程,侦听服务器返回的消息
DWORD ThreadServer(LPDWORD lpdWord)
{
CBillClientApp   *pCBillClientApp = (CBillClientApp *)lpdWord; 
while(1)
{
PacketIN *recvBuf = new PacketIN();
int RecLen;
RecLen = recv(pCBillClientApp->m_sock,recvBuf->data,MAX_PACKET_SIZE,0); if(RecLen > 1)
SendMessage(pCBillClientApp->m_hWnd,pCBillClientApp->m_uCmd,(WPARAM)recvBuf,0);
else
{
closesocket(pCBillClientApp->m_sock);
return 0;
}
}
}

解决方案 »

  1.   

    m_sock   =   socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 
    创建之前初始化一下!
      

  2.   

    m_sock       =       socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);   
    创建之前初始化一下
    ---------------------
    已经初始化了,主贴中已经贴出来了,你没注意看调试,跟踪
    -----------------------
    release版如何跟踪呢?
      

  3.   

    你release有问题的话  一定是有什么变量没有初始化的 这是不用想的。   debug会自动给你初始化变量而release不会
      

  4.   

    生成pdb符号文,然后用windbg运行程序,可以调试的
      

  5.   

    DWORD   ThreadServer(LPDWORD   lpdWord) 

    CBillClientApp       *pCBillClientApp   =   (CBillClientApp   *)lpdWord;   
    while(1) 

    PacketIN   *recvBuf   =   new   PacketIN(); 
    int   RecLen; 
    RecLen   =   recv(pCBillClientApp-> m_sock,recvBuf-> data,MAX_PACKET_SIZE,0); if(RecLen   >   1) 
    SendMessage(pCBillClientApp-> m_hWnd,pCBillClientApp-> m_uCmd,(WPARAM)recvBuf,0); 
    else 

    closesocket(pCBillClientApp-> m_sock); 
    return   0; 


    }你在pCBillClientApp-> m_uCmd的消息处理函数里面,对recvBuf-> data处理的长度注意一下
      

  6.   

    强烈不建议用消息传递数据,我以前有过类似的经历,你用指针传递数据看看
    SendMessage(pCBillClientApp-> m_hWnd,pCBillClientApp-> m_uCmd,(WPARAM)recvBuf,0); 
      

  7.   

    问题已解决,是PacketIN中的data与datalen变量没有初始化,在构造函数中初始化后正常.