Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中设置具有非本地IP地址的服务器+;(Qt) 我对网络编程很陌生,所以我不确定这是不是正确的问题,但是我想用C++来做一个服务器程序(我使用Qt)。我使用了“财富服务器”的例子,它创建了一个简单的服务器,你可以通过输入服务器显示的IP地址与客户机连接。如果输入localhost(127.0.0.1),我可以连接,但是服务器说它运行的地址是169.254.253.67,我发现它是另一个本地地址(我也无法连接到它)。如何运行服务器,使它不在本地地址上_C++_Qt_Network Programming_Ip Address - Fatal编程技术网

在C+中设置具有非本地IP地址的服务器+;(Qt) 我对网络编程很陌生,所以我不确定这是不是正确的问题,但是我想用C++来做一个服务器程序(我使用Qt)。我使用了“财富服务器”的例子,它创建了一个简单的服务器,你可以通过输入服务器显示的IP地址与客户机连接。如果输入localhost(127.0.0.1),我可以连接,但是服务器说它运行的地址是169.254.253.67,我发现它是另一个本地地址(我也无法连接到它)。如何运行服务器,使它不在本地地址上

在C+中设置具有非本地IP地址的服务器+;(Qt) 我对网络编程很陌生,所以我不确定这是不是正确的问题,但是我想用C++来做一个服务器程序(我使用Qt)。我使用了“财富服务器”的例子,它创建了一个简单的服务器,你可以通过输入服务器显示的IP地址与客户机连接。如果输入localhost(127.0.0.1),我可以连接,但是服务器说它运行的地址是169.254.253.67,我发现它是另一个本地地址(我也无法连接到它)。如何运行服务器,使它不在本地地址上,c++,qt,network-programming,ip-address,C++,Qt,Network Programming,Ip Address,以下是我使用的示例: 服务器实现获取所有发现的ip地址的列表,然后查找第一个非本地ip地址。否则,它默认使用localhost。如果您看到一个本地主机地址,则表明您的网络中没有正确设置,并且Qt无法确定LAN ip 正如@drescherjm在评论中所建议的,您可以通过0.0.0.0显式监听所有接口。要查看此操作,只需在它设置状态标签之前添加一行,并使用ipAddress字符串: // add this to force the socket to listen on all interface

以下是我使用的示例:

服务器实现获取所有发现的ip地址的列表,然后查找第一个非本地ip地址。否则,它默认使用localhost。如果您看到一个本地主机地址,则表明您的网络中没有正确设置,并且Qt无法确定LAN ip

正如@drescherjm在评论中所建议的,您可以通过
0.0.0.0
显式监听所有接口。要查看此操作,只需在它设置状态标签之前添加一行,并使用
ipAddress
字符串:

// add this to force the socket to listen on all interfaces
ipAddress = QHostAddress("0.0.0.0").toString();
// or if you have a local static ip and want to be explicit
// ipAddress = QHostAddress("192.168.xxx.xxx").toString();

// followed by the already existing line for setting the text
statusLabel->setText(tr("The server is running on\n\nIP: %1\nport: %2\n\n"
                        "Run the Fortune Client example now.")
                     .arg(ipAddress).arg(tcpServer->serverPort()));

现在,如果您的网络设置正确,任何其他可以看到运行服务器应用程序的计算机都应该能够连接到给定的端口。

我不确定您要问什么,但是,如果您使用0.0.0.0作为侦听地址,服务器将在您PC中的所有NIC上侦听。或者您可以为侦听指定外部IP地址()您可以使用以下链接确定主nic的IP地址:@drescherjm您不能指定外部IP地址。Hmm。我有以下代码,其中m\u serverIP是一个qtcserver:m\u-pPrivate->m\u-server.listen(m\u-pPrivate->m\u-serverIP,m\u-pPrivate->m\u-port);谢谢你的帮助。我做了更多的研究,发现问题是我连接到了一个路由器,所以我得到了一个本地IP地址(如你所说的192.168.1.x),我不能用这个IP创建一个可以全局连接的服务器。我想我需要设置端口转发之类的?哦,让WAN客户端通过路由器连接?是的,您需要在路由器上设置端口转发,以便它将特定TCP端口上的流量发送到您的本地地址。然后外部客户端将连接到该端口上的公共IP,并路由到本地计算机。