Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理';错误的文件描述符';套接字编程的读取函数出错 我试图用C++编写一个简单的套接字程序。一旦我运行了下面的服务器程序,它将执行最多acceptConnection()函数,并在运行客户机后按预期继续运行。但最后,readSocket()函数中出现了一个错误的文件描述符错误。我如何修复这个错误,或者我是否做错了什么?谢谢你宝贵的时间_C++_Sockets - Fatal编程技术网

如何处理';错误的文件描述符';套接字编程的读取函数出错 我试图用C++编写一个简单的套接字程序。一旦我运行了下面的服务器程序,它将执行最多acceptConnection()函数,并在运行客户机后按预期继续运行。但最后,readSocket()函数中出现了一个错误的文件描述符错误。我如何修复这个错误,或者我是否做错了什么?谢谢你宝贵的时间

如何处理';错误的文件描述符';套接字编程的读取函数出错 我试图用C++编写一个简单的套接字程序。一旦我运行了下面的服务器程序,它将执行最多acceptConnection()函数,并在运行客户机后按预期继续运行。但最后,readSocket()函数中出现了一个错误的文件描述符错误。我如何修复这个错误,或者我是否做错了什么?谢谢你宝贵的时间,c++,sockets,C++,Sockets,服务器程序 void Server2::createSocket(){ #ifdef WIN32 // Initialize Winsock int iResult; WSADATA wsaData; iResult = WSAStartup(MAKEWORD(2,2), &wsaData); if (iResult != 0) { std::cout << "WSAStartup failed: " <&

服务器程序

void Server2::createSocket(){
    #ifdef WIN32
    // Initialize Winsock
    int iResult;
    WSADATA wsaData;
    iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    if (iResult != 0) {
        std::cout << "WSAStartup failed: " << iResult << std::endl;

    }
    #endif

    sockfd = socket(AF_INET, SOCK_STREAM, 0);

    if(sockfd < 0){
        int err = WSAGetLastError();
        cout << "Create socket failed with error " << err << endl;
        exit(EXIT_FAILURE);
    }

}

void Server2::clearAdrressStructure(){

    bzero((char*)&serv_addr, sizeof(serv_addr));

}

void Server2::bindSocket(){
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(portno);

    if(bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0){
        int err = WSAGetLastError();
        cout << "Bind failed with error " << err << endl;
        exit(EXIT_FAILURE);
    }

}

void Server2::listenConnection(){

    int a = listen(sockfd, 5);

    if(a < 0){
        int err = WSAGetLastError();
        cout << "Listen failed with error " << err << endl;
        exit(EXIT_FAILURE);
    }

}

void Server2::acceptConnection(){
    clilen = sizeof(clien_addr);

    newsockfd = accept(sockfd, (struct sockaddr *)&clien_addr, &clilen);

    if(newsockfd < 0){
        int err = WSAGetLastError();
        cout << "Accept failed with error " << err << endl;
        exit(EXIT_FAILURE);
    }

    cout << "Server got connection from " << inet_ntoa(clien_addr.sin_addr) << " port " << ntohs(clien_addr.sin_port) << endl;
}

void Server2::sendMessage(){

    if(send(newsockfd, "Hello, World!\n", 13, 0) < 0){
        int err = WSAGetLastError();
        cout << "Send failed with error " << err << endl;
        perror("Sending failed");
        exit(EXIT_FAILURE);
    }
    bzero(buffer, 256);

}

void Server2::readSocket(){

    if(read(newsockfd, buffer, sizeof(buffer)) < 0){
        int err = WSAGetLastError();
        cout << "Read failed with error " << err << endl;
        perror("Reading failed");
        exit(EXIT_FAILURE);
    }

    cout << "MESSAGE: " << buffer << endl;
}

从逻辑上讲,任何人都无法帮助您,因为所显示的代码不符合a的要求,如中所述。请看更多的帮助。哦!很抱歉,我不明白如何达到最小可复制示例的要求,因为这是整个服务器程序。没有其他东西可以显示,我从互联网上找到了这段代码@SamVarshavchikWhich关于生成一个您不清楚的服务器的部分说明?我添加了Server类来展示我实现了什么以及如何实现。然后调用main方法来显示方法的顺序。“readSocket()”函数出现“文件描述符不正确”的错误。我没有问你做了什么。我问你不确定a的哪一部分。您能否回答以下问题:是否有人可以剪切/粘贴您上面显示的内容,然后尝试编译、运行和重现您的错误?除非你能回答“是”,否则你怎么能声称你所展示的内容符合一份报告的“可复制”部分?当然,答案是“不”。
int main(){

    Server2 server;

    server.createSocket();
    server.clearAdrressStructure();
    server.bindSocket();
    server.listenConnection();
    server.acceptConnection();
    server.sendMessage();
    server.readSocket();

    close(server.newsockfd);
    close(server.sockfd);

    return 0;
}