win32控制台Socket程序,考虑做成服务,用到MFC,继承了CAsyncSocket,但是创建socket对象时总是不成功,请问是什么原因?
是win32控制台下不能用CAsyncSocket吗?还是具体操作的其他原因?源代码如下(CClient、CServer继承自CAsyncSocket)
/////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "HHH.h"
#include "afxmt.h"
#include "CTUClient.h"
#include "CTUServer.h"CClient clientSocket;
CServer serverSocket;using namespace std;int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0; // 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("致命错误:MFC 初始化失败\n"));
nRetCode = 1;
}
else
{ serverSocket.Create(2003,SOCK_STREAM,FD_ACCEPT);//这里总是返回0 值
serverSocket.Listen(); //这里也总是返回0值 cout<<endl;
cout<<endl;
getchar();
} return nRetCode;
}

解决方案 »

  1.   

    The Windows Sockets WSAStartup function initiates use of WS2_32.DLL by a process.int WSAStartup (
      WORD wVersionRequested,  
      LPWSADATA lpWSAData  
    );
     你把这个函数加到函数的开始处,就好了。
      

  2.   

    WORD wVersionRequested; WSADATA wsaData;
    int err;
     
    wVersionRequested = MAKEWORD( 2, 2 );
     
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != NO_ERROR ) 
    return FALSE;
    把以上这段代码加到serverSocket.Create(2003,SOCK_STREAM,FD_ACCEPT);上面就可以了。
      

  3.   

    我也遇到同样的问题,查到@err,hr,说“应用程序没有调用 WSAStartup,或者 WSAStartup 失败。”
      

  4.   

    A CAsyncSocket object represents a Windows Socket — an endpoint of network communication.
    再普通的服务程序中不可创建窗口,否则服务启动失败。CAsyncSocket 其实是利用window消息机制实现的,所以失败
      

  5.   

    WSADATA m_data;
    WSAStartup(MAKEWORD(2,2),&m_data);
    加在定义SOCKET之前