0

全部。

我使用开源库 stlplus 进行 tcp 消息传递。接下来是我的工作计划。

我有服务器应用程序和客户端应用程序。它们都可以运行并等待对方出现,然后连接并交换消息。使用服务器 IP 地址和端口号创建连接。

在我的有线本地网络中,一切正常。如果仅运行一个程序(这似乎很明显,但请进一步阅读)并且连接时交换消息没有任何问题,则程序不会连接。

之后我决定在无线网络中测试它们。所以我在一个笔记本上创建了托管网络,并从另一个笔记本上连接到它。我还创建了两台计算机的家庭组。计算机之间的 Ping(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;
}
4

1 回答 1

0

我解决了这个问题。

不确定我是否处理了问题的根源,但谁知道呢。在这里我写解释以防有人遇到同样的问题,或者只是可以添加一些内容以使其更清楚。

我的应用程序是按以下方式组织的:有一个类,我在单独的线程中启动服务器。我有该类的两个实例,因此大约同时创建了两个服务器。而且我发现无法使用错误消息 10093 进行初始化(尚未调用 WSAStartup 或已调用 WSACleanup)。

我试图在 ip_socket 类中调试它,但多线程存在问题。所以,我制作了一个互斥锁,它在服务器创建之前被锁定并在之后立即解锁。

之后,所有问题都消失了。

于 2015-11-23T08:04:17.143 回答