【问题标题】:Can I find the port number if I only have the SOCKET?如果我只有 SOCKET,我能找到端口号吗?
【发布时间】:2012-03-17 15:50:13
【问题描述】:

如果我只有 SOCKET,我能找到端口号吗?我正在挂钩 ws2_32 调用,似乎 SOCKET 正在尝试发送数据,但我没有关于此 SOCKET 的信息。我想知道是否有办法从 SOCKET 获取 sockaddr 或端口?

我在 UDP 套接字上遇到了类似的问题,但我通过在 sockaddr 即将发送数据时获取端口号并更新了我的相关信息来修复它。但问题是,除了 SOCKET 之外,我没有其他东西可做。

该程序正在使用端口 0 创建一个 SOCKET,然后将其分配给一个新端口。到那时,我的程序在套接字上的信息已经使用端口 0 设置,这是不正确的。所以,我需要找到一种方法... A:根据 SOCKET 找到端口,或者 B:当 windows 更新端口时,我可以挂钩并更新端口。

【问题讨论】:

    标签: c++ sockets winsock


    【解决方案1】:

    有两个功能可以完全满足您的需求:

    1. getpeername - 获取 TCP 连接另一端的信息
    2. getsockname - 获取有关 TCP 和 UDP 的套接字(本地端)的信息

    【讨论】:

    • @sirgeorge 你有样品吗?我无法在与 WSAConnectByName 连接的套接字中使用 getpeername()。实际上它已连接时,它会返回我 winsock 错误 WSAENOTCONN(套接字未连接)。
    • @Kiewic:你使用什么协议?如果是UDP,则不能使用getpeername
    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多