【问题标题】:Bsd socket how can I find server port number for connection?Bsd套接字如何找到连接的服务器端口号?
【发布时间】:2016-05-22 02:48:32
【问题描述】:

我有一个服务器:

./服务器端口号

我有一个客户:

./client serverIpAddress

我在客户端只有服务器 IP 地址。我想连接到服务器套接字。但是每次服务器端口号都不一样。如何在客户端使用 BSD 套接字连接到服务器套接字?这是不可能的吗?我必须知道服务器端口号吗?

简单使用BSD Socket:

    int socket_desc;
    struct sockaddr_in server;

    //Create socket
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }

    server.sin_addr.s_addr = inet_addr(ipAddress);
    server.sin_family = AF_INET;
    server.sin_port = htons( ThisIsServerPortNumber );

    //Connect to remote server
    if (connect(socket_desc , (struct sockaddr *)&server , sizeof(server)) < 0)
    {
        puts("connect error");
        return 1;
    }

【问题讨论】:

  • 你在哪里设置套接字的 C 代码?你的问题有点不清楚。或者你想从命令行找到它?

标签: c sockets client-server


【解决方案1】:

选择一个介于 49152 和 65535 之间的port number 进行开发。如果您的想法成功,您将需要注册一个介于 1024 和 49151 之间的端口号。从 0 到 1023 的端口号是众所周知的端口,例如端口 80 用于 HTTP 服务器。

TCP Port Service Multiplexer 协议旨在允许发现 TCP 服务器的端口号,但出于安全考虑,它很少使用。

【讨论】:

    【解决方案2】:

    bind(2) 系统调用用于选择服务器中的端口号。它必须在listen(2) 系统调用之前和socket(2) 调用之后调用。

    它不仅可以指定服务器要监听连接的端口号,还可以指定 ip 地址,以防主机有多个接口并且您只想接受一个连接的接口。

    【讨论】:

      【解决方案3】:

      但是每次服务器端口号都不一样。我怎样才能连接到 客户端中带有 BSD 套接字的服务器套接字? ……我必须知道吗 服务器端口号?

      是的,你必须知道。想一想:服务器主机上可以运行许多不同的服务器程序,绑定到许多不同的端口。客户端计算机无法简单地了解服务器主机以查看所需的服务器程序绑定到哪个端口。因此,通常在服务器和客户端中使用预先分配的端口号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        • 2021-10-13
        • 2017-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        相关资源
        最近更新 更多