【问题标题】:Finding the port number used in client [duplicate]查找客户端中使用的端口号 [重复]
【发布时间】:2014-01-25 09:23:08
【问题描述】:

当客户端调用 connect() 函数时,有没有办法以编程方式找到分配给客户端的端口。

getsockname 在服务器中实现。但是客户端应该使用什么?

【问题讨论】:

    标签: c sockets network-programming


    【解决方案1】:

    connect() 隐式调用bind() 为套接字分配一个名称,如果您自己没有这样做的话。 connect() 调用成功后,您可以在套接字上使用getsockname() 来检索端口。

    当您在调用bind()(端口号等于0)时让操作系统为您选择端口并且您想知道哪个端口分配给套接字时,它也很有用。

    【讨论】:

      【解决方案2】:

      您可以使用getpeername() 获取对等方使用的端口号,如以下代码片段所示,适用于 IPv4:

          int s = ... // socket number
          struct sockaddr_in sa;
          socklen_t len = sizeof sa;
          if (getpeername(s, (struct sockaddr *)&sa, &len) < 0)
              perror("getpeername()");
          else
              printf("port %d\n", ntohs(sa.sin_port));
      

      此外,在服务器端,您调用accept()accept() 本身将返回一个填充的sa,它提供对等方的端口。

      IPv6 类似:参见例如http://beej.us/guide/bgnet/output/html/multipage/getpeernameman.html

      【讨论】:

        猜你喜欢
        • 2011-01-19
        • 2012-12-04
        • 1970-01-01
        • 1970-01-01
        • 2011-09-08
        • 2018-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多