c++ - 如何使 .cpp 文件充当可访问的服务器

标签 c++ linux sockets berkeley-sockets

我用 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 地址作为其目标地址,该地址应该是发往服务器的地址。那我该怎么联系呢?

最佳答案

INADDR_ANY 用于指定系统中所有事件网络接口(interface)应绑定(bind)到。因此,如果您连接到多个网络,您将能够与来自所有这些网络的连接进行通信。不过,大多数系统通常只有一个,这仍然表明,如果绑定(bind)到该接口(interface)的 IP 碰巧发生更改,您仍然会绑定(bind)到该接口(interface)。

因此,一旦指定了INADDR_ANY,就需要根据以下规则发起连接:

  1. 如果您从同一台物理机进行连接,最简单的方法是使用环回接口(interface) (127.0.0.1)。不过,您仍然可以执行 (2)。
  2. 如果您从另一台计算机进行连接,则需要从该计算机选择可访问的服务器 IP 地址。如上所述,如果您的服务器仅连接到一个网络,则这只是服务器的 IP 地址。在内部网络中,该地址通常类似于 192.168.x.y 或 10.0.x.y,但并非必须如此。
  3. 如果您从使用网关访问服务器的不同网络进行连接,则您需要在相关路由器中设置端口转发,以便当它们收到端口 X 的连接时,它们会知道在内部将其传输到您的服务器。

关于c++ - 如何使 .cpp 文件充当可访问的服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35554287/

相关文章:

c++ - 过滤模板函数的特定迭代器

python - Linux环境下的pyqt4

php - 如何设置html文件夹的权限

c++ - 快速 json 解析器在尝试解析 '\n' 字符时返回 null

java - 谷歌 Protocol Buffer (Java 到 C++)

Java套接字编程: Is it possible for the server socket to initiate a communication?

c - 在这种情况下使用 uint64_t 是一个不好的做法吗?

c# - Socket.Disconnect( bool 重用)

c++ - 如何 "Print Out"QStandardItem的数据

linux - 我的 '[]' 在哪里?,bash 程序