首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发送有效套接字后出现WSAENOTSOCK错误

发送有效套接字后出现WSAENOTSOCK错误
EN

Stack Overflow用户
提问于 2014-05-15 13:08:13
回答 1查看 636关注 0票数 0

好的,我正在使用WinSockets2创建一个非常简单的服务器-客户端应用程序。我已经初始化了套接字,并且正在尝试允许服务器是多用户的。到目前为止,我几乎100%确定服务器套接字的格式是正确的,并且我100%确定客户端套接字是正确的,因为我在另一台服务器上使用了它。尽管如此,recv函数还是会失败,并返回错误WSAENOTSOCK。有问题的代码:

代码语言:javascript
复制
unsigned __stdcall client(void *data) {
    SOCKET clientSocket = (SOCKET)data;

    char inBuffer[DEFAULT_BUFLEN];

    int inBytes = SOCKET_ERROR;

    ZeroMemory(inBuffer, sizeof(inBuffer)); //make sure the buffer is 0

    inBytes = recv(clientSocket, inBuffer, sizeof(inBuffer), 0);
    printf("Client said: %s and there's this also %d\n", inBuffer, inBytes);

    if (inBytes == SOCKET_ERROR) {
        printf("eek! Something went wrong! %ld\n", WSAGetLastError());
    }
    return 0;
}

再往下一点...

代码语言:javascript
复制
    bool serverOn = true;
    while (clientSocket = accept(listenSocket, NULL, NULL) && serverOn) {
        //http://stackoverflow.com/questions/15185380/tcp-winsock-accept-multiple-connections-clients
        unsigned threadID;
        HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &client, (void*)clientSocket, 0, &threadID);
    }

    if (iResult = shutdown(clientSocket, SD_SEND) == SOCKET_ERROR) { //clean up and end everything
        printf("shutdown failed: %d\n", WSAGetLastError());
        closesocket(clientSocket);
        WSACleanup();
        return 1;
    }

    closesocket(clientSocket);
    WSACleanup();

    return 0;
}

如果需要任何其他代码,请联系我们。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-05-15 13:17:34

好的,经过反复试验,我找到了答案。在此代码块中:

代码语言:javascript
复制
 bool serverOn = true;
    while (clientSocket = accept(listenSocket, NULL, NULL) && serverOn) {
        //http://stackoverflow.com/questions/15185380/tcp-winsock-accept-multiple-connections-clients
        unsigned threadID;
        HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &client, (void*)clientSocket, 0, &threadID);
    }

    if (iResult = shutdown(clientSocket, SD_SEND) == SOCKET_ERROR) { //clean up and end everything
        printf("shutdown failed: %d\n", WSAGetLastError());
        closesocket(clientSocket);
        WSACleanup();
        return 1;
    }

    closesocket(clientSocket);
    WSACleanup();

    return 0;
}

while (clientSocket = accept(listenSocket, NULL, NULL) && serverOn) {应该被分成两行,

代码语言:javascript
复制
while (serverOn) {
        clientSocket = accept(listenSocket, NULL, NULL);

我猜这与变量的作用域有关。编码快乐的家伙们!

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23669692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档