以下是程序的部分代码,连接正常为什么send的时候会说找不到m_hSock呢?
m_hSock = socket(AF_INET,SOCK_STREAM,6);
ASSERT(m_hSock != NULL);

m_addr.sin_family=AF_INET;
m_addr.sin_addr.S_un.S_addr=inet_addr(IP);
m_addr.sin_port=htons(port);
int ret=0;
int error=0;
ret=connect(m_hSock,(LPSOCKADDR)&m_addr,sizeof(m_addr));
if(ret==SOCKET_ERROR)
{
TRACE("Connect Error:%d\n",(error = WSAGetLastError() ));
return FALSE;
} ret=WSAAsyncSelect(m_hSock,m_hWnd,WM_P2PCLIEVENT,
FD_READ | FD_CLOSE |FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT);
if(ret==SOCKET_ERROR)
{
TRACE("WSAAsyncSelect Error:%d\n",( error = WSAGetLastError() ));
return FALSE;
}
WSADATA wsaData;
WORD version=MAKEWORD(1,1);
int ret=WSAStartup(version,&wsaData);
TRACE("WSAStartup return value ret=%d\n",ret);
if(ret!=0)
TRACE("WSAStartup Error!\n"); if(m_hSock==NULL)
{
TRACE("m_hSock==NULL");
return FALSE;
} ret = send(m_hSock,buf,10,0);//ret返回10038

解决方案 »

  1.   

    WSADATA wsaData;
    WORD version=MAKEWORD(1,1);
    int ret=WSAStartup(version,&wsaData);
    TRACE("WSAStartup return value ret=%d\n",ret);
    if(ret!=0)
    TRACE("WSAStartup Error!\n");
    应该放在在最开始时吧
      

  2.   

    WSAStartup这个函数我放在构造类中,不是这个问题
      

  3.   

    if(m_hSock==INVALIDE_SOCKET)
    {
    TRACE("m_hSock==NULL");
    return FALSE;
    }
      

  4.   

    你的这段代码如果是连续的,二楼即为正解,即WSAStartup应在所有套接字操作函数之前,包括AsyncSelect.
    如果不是连续的(即在两个函数中实现),检查一下构造函数与发送数据函数之间执行的代码.
      

  5.   

    把WSAAsyncSelect这段去掉再试试。
      

  6.   

    if(m_hSock==INVALIDE_SOCKET)
    {
    TRACE("m_hSock==NULL");
    return FALSE;
    }