如何处理';错误的文件描述符';套接字编程的读取函数出错 我试图用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;
}