【问题标题】:TCP socket connection to lokal broker到本地代理的 TCP 套接字连接
【发布时间】:2015-05-06 22:41:44
【问题描述】:

我正在尝试使用 TCP 套接字连接连接到小型服务器(代理)HiveMQ。当我通过 cmd ping 服务器时,我收到消息:

TCP 0.0.0.0:1883 0.0.0.0:0 LISTENING

C中的连接代码是这样的:

addr.sin_family = SL_AF_INET; addr.sin_port = sl_Htons(1883); addr.sin_addr.s_addr = sl_Htonl("0.0.0.0");

我得到这个错误:

Error [-111] at line [926] in function [ConnectionToHiveMq]

这表明我的套接字连接出错:

rc = sl_Connect(mysock, (SlSockAddr_t *) &addr, sizeof(addr));

有人可以帮我解决这个问题吗?我尝试了许多不同的端口号和 IP:s 但仍然无法正常工作。如果我连接到 Web 上的应用程序客户端,它就可以工作,我可以从该代码订阅消息。但是当我尝试使用我的 lokal(代理)服务器时,它就...

【问题讨论】:

    标签: sockets tcp connection hivemq


    【解决方案1】:

    netstat(8) 输出 TCP 0.0.0.0:1883 0.0.0.0:0 LISTENING 中的 0.0.0.0:1883 仅表示服务器正在侦听该框上所有可用接口上的端口 1883。不过,您仍然需要一个有效的 IP 地址来连接它(类似于192.168.0.1),这将是其中一个接口的地址(请参阅ifconfig(8)),并且是127.0.0.1 用于loopback em> 接口,如果你在同一台机器上。

    另外,您的代码行addr.sin_addr.s_addr = sl_Htonl("0.0.0.0"); 完全错误。您需要将 IP 地址的字符串表示形式转换为整数形式,例如 inet_pton(3)

    【讨论】:

    • 好的,非常感谢 Nikolai N Fetissov!,解释得很好! “环回接口”是什么意思?是我发送数据(订阅)的接口吗?
    • Loopback 是一个虚拟网络接口,总是意味着这台计算机。如果您在 Linux 机器上,它将是 ifconfig 输出中名为 lo 的接口。
    • 好吧,我猜你在windows机器上运行也是一样的?
    • 是的,接口名称会有所不同,但 IP 127.0.0.1 是标准的。在 Windows 上,您想使用 ipconfig 命令而不是 Unix ifconfig
    • 我还有一个问题需要回答。正如我之前提到的,我使用代理(一个仅通过订阅和发布消息传递数据的小型服务器)。我是否必须使用此 TCP 代码连接到代理。或者我想订阅的客户?