是否可以使用TCP/IP套接字绑定和侦听一个IP地址?(Linux的/ C)

Den*_*ler 5 c c++ sockets linux tcp

我一直用:

serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
Run Code Online (Sandbox Code Playgroud)

这意味着我将接受来自任何界面的连接.如果我用"192.168.0.1"替换INADDR_ANY.这是否意味着我只接受来自IP地址192.168.0.1的连接,或者它是否意味着我将接受来自192.168.0.1接口的连接?

我现在有一个情况,我有多个客户端(每个客户端都有一个唯一的IP地址但相同的端口号),尝试连接到一个服务器.我可以拥有多个侦听功能(单独的线程)来侦听唯一的IP地址和端口吗?或者我必须接受任何连接并在连接后获取网络信息?


编辑提供更多说明.

如果我说serv_addr.sin_addr.s_addr = inet_addr("192.168.0.1")并且IP地址为192.168.0.2的客户端尝试连接,那么listen命令会拒绝这个吗?

Phi*_*llo 8

绑定地址是要侦听的本地地址; 您可以指定本地接口的地址.

如果要控制谁可以连接,可以检查select/accept循环内的对等地址,或使用iptables限制入站连接.

更新

如果我说serv_addr.sin_addr.s_addr = inet_addr("192.168.0.1")并且IP地址为192.168.0.2的客户端尝试连接,那么listen命令会拒绝这个吗?我希望能够有多个线程,每个线程服务一个唯一的IP地址.

不,地址是本地计算机上的地址.鉴于您要进行多线程设计,我建议您在一个线程中运行listen/accept代码,检查客户端地址,确定哪个工作线程是合适的,然后生成它.

冒着显示我的年龄的风险,我仍然更喜欢使用listen/accept/select作为大多数套接字代码 - 这是个人品味的东西,是的,在阻塞/非阻塞IO,缓冲等方面确实会影响设计.

  • 请注意,IP 很容易被欺骗,因此检查远程 IP 不应是唯一的访问控制措施。不过,这是一种以相对较低的资源消耗收割大多数人的好方法。 (2认同)
  • 没错,但是我们在192.168.xy,所以它是一个私人网络; 安全似乎不是这里的主要关注点. (2认同)