| 发表于:2007-12-28 17:33:16 楼主 |
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; } } } |
|
|
|
|