Winsocket продолжает отключаться, как только он подключается
Я работаю с DLL для теста, и я продолжаю получать ошибки сокета.
я пытаюсь подключиться к серверу localhost, когда он подключается, я закрываю сервер и хочу, чтобы он продолжал пытаться подключиться, но когда я снова открываю сервер, он продолжает отключаться
bool ISExit = false; bool Disconnect = false; void Networking(){ WSAData data; int wsResult = WSAStartup(MAKEWORD(2, 2), &data); if (wsResult != 0) { std::cout << "Can't start Winsock, Err #" << wsResult << std::endl; return; } // Create socket SOCKET sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) { std::cout << "Can't create socket, Err #" << WSAGetLastError() << std::endl; WSACleanup(); return; } // Fill in a hint structure sockaddr_in hint; hint.sin_family = AF_INET; hint.sin_port = htons(port); inet_pton(AF_INET, ipAddress.c_str(), &hint.sin_addr); // Connect to server int connResult = connect(sock, (sockaddr*)&hint, sizeof(hint)); if (connResult == SOCKET_ERROR) { std::cout << "Can't connect to server, Err #" << WSAGetLastError() << std::endl; closesocket(sock); WSACleanup(); return; } // while loop to send and receive data while (!IsExit) { std::cout << "IsExit = " << std::boolalpha << IsExit << std::endl; std::cout << "Disconnect = " << std::boolalpha << Disconnect << std::endl; std::string output{ GetData(sock) }; std::cout << output; if (output == "exit\n") { IsExit = true; } if (Disconnect) { IsExit = true; } } // Gracefully close down everything closesocket(sock); WSACleanup(); } int main(){ while(true){ Networking(); } }
Что я уже пробовал:
я пытался закрыть носок и снова открыть его, но это не сработало, и я пытался понять, почему и за всю свою жизнь я не могу понять, что не так с моим кодом.
верно я верю что проблема здесь
std::string GetData(SOCKET sock) { char buf[1024]; int bytesReceived = recv(sock, buf, 1024, 0); if (bytesReceived == SOCKET_ERROR) std::cout << "SOCKET ERROR (GETDATA())\n"; IsExit = true; return std::string(buf, 0, bytesReceived); }
Shao Voon Wong
Что такое консольный вывод? Disconnect может быть установлен в true по умолчанию?
WOLF 2018
disconnect имеет значение false
0x01AA
Как насчет этого IsExit
- Я не вижу, чтобы вы инициализировали его на false...
WOLF 2018
ну он установлен на false
боол IsExit = ложь;
хотя (!IsExit)
{
СТД::строка ввода;
std::getline(std::cin, input);
SendData(носок, вход);
std::string output{ GetData(sock) };
с std::соиь <&ЛТ; выход &ЛТ;&ЛТ; функция std::епси;
если (результат == "выход\п") {
IsExit = true;
}
если (отключить) {
IsExit = true;
}
}
0x01AA
Хорошо, я только не вижу этого в коде, который вы разместили в вопросе ;)
0x01AA
Теперь в обновленном коде в вопросе вы все еще не установили IsExit в false, и поэтому при вызове Networking во второй раз он не будет выполнять цикл...
WOLF 2018
это правда, я попробую это сделать
WOLF 2018
хорошо я попробовал добавить это в начале работы в Сети
с
IsExit = false;
Disconnect = false;
и он делает то же самое