服务器如何确定客户端是本地还是远程?

时间:2015-03-20 21:53:47

标签: sockets tcp client server

我正在尝试创建一个能够确定每个接受的连接是本地连接还是远程连接的服务器。

服务器执行此操作:

  1. 调用socket()创建TCP srvsock
  2. bind()srvsock到INADDR_ANY | server_port
  3. listen()on svrsock
  4. svrsock上的accept()连接
  5. 本地客户端执行此操作:

    1. 调用socket()创建clisock
    2. connect()clisock到127.0.0.1 | server_port
    3. 远程客户端执行此操作:

      1. 调用socket()创建clisock
      2. connect()clisock到server_public_ip | server_port
      3. 当accept()返回时,服务器如何确定客户端是本地还是远程?

1 个答案:

答案 0 :(得分:0)

服务器可以使用getpeername()获取已连接客户端的地址。或者使用accept()输出的地址。无论哪种方式,如果该地址是getifaddrs()(或等效函数,取决于您的平台)返回的地址之一,那么客户端是本地的;否则,它很遥远。