c - 获取Socket使用的本地端口

标签 c sockets winsock

我需要获取(客户端)套接字使用的本地端口。

据我了解,Windows Sockets 执行隐式绑定(bind)函数调用,因此 sendto() 之后的 getsockname() 应提供分配的港口。但是,它始终将端口号设置为 0。我错过了什么吗?

例如:

if (sendto(sockfd, ...) != SOCKET_ERROR)
    printf("Sent\n");

if (getsockname(sockfd, (struct sockaddr*)&sin, &sinlen) != SOCKET_ERROR)
    printf("port = %u\n", ntohs(sin.sin_port);
else
    printf("Error");

//result: Sent, port = 0

最佳答案

重新启动计算机即可解决问题。仍不清楚实际原因,但目前我很高兴它能正常工作。

如果有人有无需重新启动即可解决问题的想法(对于 future 的读者),请随时发帖。

关于c - 获取Socket使用的本地端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30597111/

相关文章:

java - 无法使用 "Install New Software"在使用 ubuntu 14.04 的 eclipse 上添加 cdt

c++ - C 和 C++ 中的多字 rune 字

一个应用程序可以处理N个accept连接并且每个accept使用一个独立的线程吗

c++ - 连接()不起作用

c - 使用 winsock 发送结构

c++ - 没有无限缓冲区的 Winsock WSAAsyncSelect 发送

C:如何遍历数字的二进制表示并相乘

c - 如何解决我的 if 语句不被识别为 true 的问题

c - 线程竞争条件和 C 中的按值传递

python - 发送 CAN J1939 消息