все.
Я использую открытую библиотеку stlplus для tcp-сообщений.
Схема моей работы следующая.
У меня есть серверное приложение и клиентское приложение. Они могут быть запущены и ждать появления другой стороны, затем подключаться и обмениваться сообщениями. Соединение создается с использованием IP-адреса сервера и номера порта.
В моей проводной локальной сети все отлично работает. Программы не подключаются, если запущена только одна (кажется очевидным, но читайте дальше), и при подключении обмениваются сообщениями с вами без каких-либо проблем.
После этого я решил проверить их в беспроводной сети. Поэтому я создал размещенную сеть на одном ноутбуке и подключился к ней с другого. Также я создал домашнюю группу из двух компьютеров. Пинг (IP и порт) между компьютерами в порядке. Я даже могу отправлять сообщения, используя Windows MSG.exe.
И сейчас проблема.
Клиентская программа говорит (записывает в журнал), что она подключается к серверу и даже отправляет сообщения, когда сервер не запущен.
Как это может быть? Какие настройки я могу пропустить?
Таких проблем обнаружено не было при длительном использовании в проводной сети.
Я даже сделал специальные разрешающие правила в брандмауэре, а после даже отключил его полностью, но ситуация все та же.
Я не знаю, что проверять или делать дальше.
Я сделал самый простой пример с этим кодом, и результат тот же (((
Я получаю «связанное» слово бесконечно
// ================================================ ===========
#include <iostream>
// stlplus
#include "portability.hpp"#include "strings.hpp"
using namespace stlplus;
int INI_TCP_TIMEOUT = 10000000;
int main (int argc, char* argv[])
{
stlplus::TCP_client tcpClient("192.168.173.1", 139, INI_TCP_TIMEOUT);
if (false == tcpClient.initialised() )
{
std::cout << "client: retry";
return 0;
}
if (false == tcpClient.connected())
{
std::cout << "client: retry";
return 0;
}
while (true == tcpClient.connected())
{
std::cout << "connected; \n";
}
return 0;
}
Я решил проблему.
Не уверен, что я лечил корень проблемы, но кто знает.
Здесь я пишу объяснения на случай, если кто-то столкнется с той же проблемой или просто может что-то добавить, чтобы сделать ее более понятной.
Моя заявка была организована следующим образом:
был класс, в котором я запускаю сервер в отдельном потоке. У меня есть два экземпляра этого класса,
поэтому два сервера были созданы примерно в одно и то же время. И, как я обнаружил, его нельзя инициализировать сообщением об ошибке 10093 (либо WSAStartup еще не вызывается, либо WSACleanup уже вызывается).
Я пытался отладить это внутри класса ip_socket, но были проблемы с многопоточностью. Итак, я сделал мьютекс, который заблокирован непосредственно перед созданием сервера и разблокирован сразу после.
После этого все проблемы исчезли.
Других решений пока нет …