2 rfyzzyq rfyzzyq 于 2015.06.08 10:45 提问

求赐教在使用winsock2.h时listen返回-1,GetLastError返回6怎么解决

代码是这样的:

 void server::onOpenNetwork(Ref * sender)
{
    int lastError;
    //创建套接字
    WORD myVersionRequest;
    WSADATA wsaData;
    myVersionRequest = MAKEWORD(1, 1);
    int err;
    err = WSAStartup(myVersionRequest, &wsaData);
    if (!err){
        log("已打开套接字\n");
    }
    else{
        log("ERROR:嵌套字未打开!");
        return;
    }
    lastError = WSAGetLastError();
    //进一步绑定套接字
    SOCKET serSocket = socket(AF_INET, SOCK_STREAM, 0);//创建了可识别套接字

    //需要绑定的参数
    SOCKADDR_IN addr;
    addr.sin_family = AF_INET;
    addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//ip地址
    addr.sin_port = htons(21567);//绑定端口

    /*int bindErr=*/bind(serSocket, (SOCKADDR*)&addr, sizeof(SOCKADDR));//绑定完成
    lastError = WSAGetLastError();

    int listenErr=listen(serSocket, 10);//其中第二个参数代表能够接收的最多的连接数

    if (listenErr < 0)
    {
        log("监听失败");
        lastError=WSAGetLastError();
    }

    //////////////////////////////////////////////////////////////////////////
    //开始进行监听
    //////////////////////////////////////////////////////////////////////////
    SOCKADDR_IN clientsocket;
    int len = sizeof(SOCKADDR);


    while (1)
    {
        SOCKET serConn = accept(serSocket, (SOCKADDR*)&clientsocket, &len);//如果这里不是accept而是conection的话。。就会不断的监听


        //创建线程来处理这个链接
        ClientThread clientDeal = ClientThread(serConn);

    }


    WSACleanup();//释放资源的操作
}

说明一下就是,我这里是在cocos2dx里面写的一段代码。作用就是当按下按钮之后调用这个函数打开网络,作为服务器。前面这段代码在win32控制台是可以得,但是拿到这里就不行了,不知道跟这个是不是有关系,求赐教^_^

4个回答

gamefinity
gamefinity   Rxr 2015.06.08 10:55
rfyzzyq
rfyzzyq 谢答,嗯 ,我查过这个位置是句柄无效,前面检查过socket返回值,是正常的,不是SOCKET_ERROR
接近 3 年之前 回复
oyljerry
oyljerry   Ds   Rxr 2015.06.08 22:01

windows api能够在你的cocos2d x中支持?

rfyzzyq
rfyzzyq 谢答,嗯,是可以的,这个只是不能跨平台了,用还是一样吧,至少得我用winsock2写的客户端是可以正常用的^_^
接近 3 年之前 回复
devmiao
devmiao   Ds   Rxr 2015.06.08 22:03
rfyzzyq
rfyzzyq 谢答^_^ 这真是帮了大忙哦^_^
接近 3 年之前 回复
rfyzzyq
rfyzzyq   2015.06.09 09:05

^^,谢谢各位老大了呀,问题找到了呀,是因为这里的bind函数跟C++11里面的bind 冲突了,关键是参数居然还能接受,
编译还能过,当时没注意这里,今天把鼠标移上去发现返回值居然不是int,返回的是个模板,然后就发现了^_^

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!