Socket客户端,主线程中connect和send,另开一个线程专用于recv,debug版一切正常,但release版recv得不到正确的数据
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;
}
}
}