我照着书上抄了一个例子,CListenSocket继承了CSocket,在使用
if(ListenSocket->Create(1000,SOCK_STREAM))时却怎么也绑定不到端口上。一位大牛说要在CListenSocket的构造函数中初始化一下:
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
我看不懂这段代码,我觉得应该不用,我看了msdn也是直接调用的create。而且我的同学给我的一个类似的例子中也是直接调用的,但是就可以绑定成功,谁能告诉我怎么回事啊?

解决方案 »

  1.   

    你先掉用了他的构造函数了没有?
    如果有,你检查一下你在CWinApp::InitInstanse()调用了AfxInitSock()没有?
    好象是这个函数,还有你一定要把winsock.h 加到Afxstd.h中,
    还不行的话,你在编译器选项卡中把SOCKET 的库文件加进去
      

  2.   

    调用构造函数?在哪里调用?不是在实例化的自动执行的吗?我刚学vc。
    AfxInitSock()是什么函数?我在msdn里面没有找到,加上以后报错。:(
    我在stdafx.h里面加了<afxsock.h>。
      

  3.   

    你新建工程的时候 好像是向导的第2步 把Windows Socket支持那一项打上勾就可以直接
    CSocket socket;
    socket.Create(1234);否则你就要自己做初始化工作,也就是你说的大牛让你做的那些工作
      

  4.   

    wVersionRequested = MAKEWORD( 2, 2 );
    err = WSAStartup( wVersionRequested, &wsaData );
    这个是检测SOCKET版本的,应该包含这块代码
      

  5.   

    danfeng(丹枫),你说得很对,哈哈,我再仔细看了一下书,真的是要打这个勾。我再问一句,打了这个勾,具体在工程中作了什么工作,就是多了什么代码?
      

  6.   

    其实也就是做了
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD( 2, 2 );
    err = WSAStartup( wVersionRequested, &wsaData );
    这么几步