-1

我用 Linux(Cent OS 7.0)和 C++ 编写了一个简单的程序。它是一个非常小的服务器,它向客户端发送回一串字符。但我的问题是我不知道如何使用 IP 地址访问该服务器?

我使用了 Linux Socket Interface (Berkeley),在定义地址的部分,我的代码执行以下操作:

    serverObject.
            sin_family = AF_INET;
    serverObject.sin_addr.
            s_addr = htonl(INADDR_ANY);
    serverObject.
            sin_port = htonl(portNumber);

我使用INADDR_ANY我的服务器地址,它在其定义中定义为:

/* Address to accept any incoming messages.  */

现在,我应该如何运行服务器,然后使用我的简单客户端程序向它发送请求。我的简单客户端程序接受一个 IP 地址作为它的目标地址,这个地址应该是发往服务器的地址。那我该怎么关联呢?

4

2 回答 2

2

INADDR_ANY去指定系统中所有活动的网络接口都应该绑定到。因此,如果您连接到多个网络,您将能够与来自所有这些网络的连接进行通信。但是,大多数系统通常只有一个,这仍然意味着如果绑定到该接口的 IP 发生变化,您仍然会绑定到该接口。

因此,一旦指定INADDR_ANY,您需要根据以下规则启动连接:

  1. 如果您从同一台物理机连接,最简单的方法是使用环回接口 (127.0.0.1)。但是,您仍然可以执行 (2)。
  2. 如果您从另一台机器连接,您需要从该机器选择您的服务器的可访问 IP 地址。如上所述,如果您的服务器只连接到一个网络,这将只是服务器IP 地址。在内部网络中,这通常是 192.168.xy 或 10.0.xy 之类的东西,但并非必须如此。
  3. 如果您从使用网关访问您的服务器的不同网络进行连接,那么您需要在相关路由器中设置端口转发,以便当他们接收到端口 X 的连接时,他们会知道在内部将其传输到您的服务器。
于 2016-02-22T13:25:48.357 回答
1

作为服务器程序员,您决定监听的端口,而不是地址。

互联网地址由您的互联网提供商提供,或 127.0.0.1 以在您自己的机器上进行测试。

互联网上有很多网页提供工具来告诉您当前的公共地址(搜索我的 Ip 是什么)。

大多数“家庭”互联网路由器都实现了 NAT:它们有一个互联网地址并将它们映射到许多设备,这些设备携带要更改的端口号(您的端口 80 变为端口(例如)2345 用于外部)。要允许您家外的客户端访问您的服务器,您需要配置路由器以映射服务器端口,例如,您的公共端口 80 映射到您的服务器端口 80。

话虽如此,您应该能够通过地址和端口将您的客户端连接到您的服务器。

如果您想使用名称 (example.org) 而不是 IP (93.184.216.34),则使用域名服务器。但这是另一个话题。

于 2016-02-22T13:14:06.050 回答