socket编程为什么不会弹出Windows防火墙安全警告?

时间:2024-03-25 11:32:23

在启动了Windows防火墙的电脑上,第一次运行QQ,Chrome等网络程序的时候,会弹出一个安全警告,如图:

socket编程为什么不会弹出Windows防火墙安全警告?

但是为什么自己用socket编程接口,开发的网络小程序,不会弹出这个窗口来呢?

经过一番研究,发现了原因:

在socket编程的流程中,有一个bind函数,用于绑定本机IP地址和端口号。

而这个bind函数就是防火墙弹窗的关键。

{	
int ret;
sockaddr_in addr;
SOCKET s;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = 0;
addr.sin_addr.S_un.S_addr = inet_addr("0.0.0.0");
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
ret = bind(s, (struct sockaddr *)&addr, sizeof(addr));
}

如上代码片段,调用bind函数,绑定本机IP地址和端口号。

如果addr.sin_port = 0,表示由系统分配一个端口号,这种情况下,Windows防火墙不会提示。

如果addr.sin_port = 非0值,表示程序指定一个端口号,这种情况下,Windows防火墙就是弹出提示。