如何找到套接字的本地端口号?(视窗C++)
How to find a socket's local port number? (Windows C++)
我是Windows网络的新手,我正试图找出我的套接字绑定到哪个端口号(c++, Windows 7, Visual Studio 2010 Professional)。这是一个UDP套接字,据我所知,使用以下初始设置应该将其绑定到一个随机可用的端口/地址:
sockaddr_in local;
local.sin_family = AF_INET;
local.sin_addr.s_addr = INADDR_ANY;
local.sin_port = 0; //randomly selected port
int result = bind(clientSock, (sockaddr*)&local, sizeof(local));
//result is always 0
就使用此方法而言,它适用于发送数据或将其绑定到特定端口(将0替换为所需的端口号)。我需要的是随机绑定它,然后找出它被绑定到哪个端口。有什么办法可以帮我吗?似乎"local"结构包含"0.0.0.0"作为IP地址和"0"作为端口号。
感谢所有的帮助!我很感激。
使用getsockname
。例如:
struct sockaddr_in sin;
int addrlen = sizeof(sin);
if(getsockname(clientSock, (struct sockaddr *)&sin, &addrlen) == 0 &&
sin.sin_family == AF_INET &&
addrlen == sizeof(sin))
{
int local_port = ntohs(sin.sin_port);
}
else
; // handle error
这也适用于基于*nix的系统,但请注意,有些系统将getsockname
的第三个参数定义为socklen_t*
类型而不是int*
类型,因此如果您正在编写跨平台代码,可能会收到关于指针签名不同的警告。
相关文章:
- 使用 VID、PID、+SN 查找 USB 端口号
- 视窗键盘输入 c++
- 视窗 10 :笔(手写笔)在 MFC 应用程序上不起作用
- C++标准视窗 SDK 文件中的编译错误
- 无法为 AES 加密创建 contex.视窗XP
- 检查视窗版本
- QtCreator 不构建.(视窗)
- 视窗 7 访问冲突
- UDP服务器绑定到错误的端口号
- 如何伪造键盘换档按.Qt,视窗10
- 为什么在 C# 中将 ushort 端口号从 hton 转换为 ntohs 会给出不同的结果
- 加载的 OpenGL 函数是特定于上下文还是特定于线程?(视窗)
- 视窗驱动程序IOCTL代码蓝屏/使计算机崩溃
- 视窗驱动程序,旋转锁采集和条件测试
- 皮克西 ||C++ ||视窗 10.
- 如何获取 winMain 的 hInstance?视窗32编程
- 使用 boost::asio 是一种便携式方法来查找可用端口号
- C++/CX 中的 [这] 是什么?(视窗 8)
- C++ - 视窗 - BIOS 序列号 - 如何获取
- 如何找到套接字的本地端口号?(视窗C++)