【问题标题】:How can I know the host name on client server program我如何知道客户端服务器程序上的主机名
【发布时间】:2013-12-10 04:16:30
【问题描述】:

我正在做一个关于使用套接字进行客户端服务器通信的程序。我在互联网上看到了客户端服务器程序的示例,但我有一个问题。如何获取主机名?我在下面的链接中的网页上看到了一个客户端程序示例。程序在命令行参数中从用户那里获取主机名,但是我怎么知道主机名呢?我尝试在上面使用我的用户名,但它说找不到主机。我都在同一台机器上运行。非常感谢您的宝贵时间。

客户: http://www.tutorialspoint.com/unix_sockets/socket_client_example.htm

服务器: http://www.tutorialspoint.com/unix_sockets/socket_server_example.htm

【问题讨论】:

    标签: linux sockets client-server host


    【解决方案1】:

    主机名与用户名不同获取主机名使用命令“hostname” 并在命令行中使用此主机名

    命令:

    主机名-->获取主机名

    hostname -->用名字设置主机名

    【讨论】:

    • 我如何找到端口号?客户端和服务将同时在同一台机器上运行。可以分配任何随机数,如 50001 吗?谢谢。
    • 在提供命令行参数时,您可以根据需要指定端口号(例如:50001)端口号是您的选择,但不使用 0 - 1024 端口号,因为这些端口是众所周知的并且被广泛使用由网络堆栈使用
    【解决方案2】:

    如果你的客户端和服务器在同一台主机上,主机名是localhost,或者你可以使用机器名,也可以使用127.0.0.1

    【讨论】:

    • 所以如果我在我的代码中硬编码,它还能在其他机器上运行吗?谢谢。
    • 仅当其他机器也有服务器在其上运行时。如果您希望服务器仅在您的机器上运行,而让客户端在其他机器上运行,则它们需要引用您机器的主机名。这有意义吗?
    • 是的,我知道你的意思。这是我家庭作业的一部分,所以我的教授将同时在他的机器上运行。
    【解决方案3】:

    假设您的意思是您当前运行的主机使用 gethostname

    int main(int argc, char *argv[])
    {
        int ret;
        char buffer[100];
    
        if ((ret = gethostname(buffer, sizeof(buffer))) == -1)
        {
            perror("gethostname");
            exit(1);
        }    
    
        printf("hostname is: %s\n", buffer);
    
        return(0);
    }
    

    【讨论】:

      【解决方案4】:

      对于客户端服务器程序,客户端必须知道要与之通信的机器的主机名或 IP 地址。

      想象一下,您正开车去一家特定的商店,您需要知道商店的地址才能到达那里。同样,客户端需要它需要与之通信的主机的地址。

      如果您正在运行自己的客户端和服务器,请在机器中输入主机名,它会为您提供主机名。通常您需要主机名和端口,但在简单的示例程序中,该值可能是硬编码的。

      【讨论】:

      • 其实这是一个作业,所以我的助教会使用他们的机器,所以你知道我该怎么做吗?谢谢。
      • 他们是否会在同一台机器上运行,如果要求他们传递主机名无效。
      • 然后你可以说localhost或使用ip地址127.0.0.1
      • 选择一个答案作为正确答案,以便关闭线程
      猜你喜欢
      • 2021-03-12
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多