Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 服务器如何确定客户端是本地的还是远程的?_Sockets_Tcp_Client_Server - Fatal编程技术网

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

Sockets 服务器如何确定客户端是本地的还是远程的?,sockets,tcp,client,server,Sockets,Tcp,Client,Server,我正在尝试创建一个能够确定每个接受的连接是本地连接还是远程连接的服务器 服务器执行以下操作: 调用socket()以创建TCP srvsock bind()srvsock到INADDR|u ANY |服务器|u端口 在svrsock上侦听() svrsock上的accept()连接 本地客户端执行以下操作: 调用socket()以创建clisock 将()clisock连接到127.0.0.1 |服务器|端口 远程客户端执行以下操作: 调用socket()以创建clisock connect()

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

服务器执行以下操作:

  • 调用socket()以创建TCP srvsock
  • bind()srvsock到INADDR|u ANY |服务器|u端口
  • 在svrsock上侦听()
  • svrsock上的accept()连接
  • 本地客户端执行以下操作:

  • 调用socket()以创建clisock
  • 将()clisock连接到127.0.0.1 |服务器|端口
  • 远程客户端执行以下操作:

  • 调用socket()以创建clisock
  • connect()clisock到服务器\公共\ ip \服务器\端口

  • 当accept()返回时,服务器如何确定客户端是本地的还是远程的?

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

    在调用connect()之前,我是否可以简单地将本地客户端绑定到127.0.0.1,而不是使用getifaddrs()并在其地址之间循环查找匹配项?如果是这样,那么服务器似乎只需要检查accept()返回的127.0.0.1。本地客户端可以在连接之前绑定到127.0.0.1,以确保服务器将其视为对等地址。然而,如果这就是你识别本地客户的方式,那么这实际上就是“本地”的定义。如果在与服务器相同的计算机上运行的客户端通过非环回地址(或不同的环回地址)连接到服务器时出现问题,从而无法识别为“本地”,则按照您的建议进行操作是不安全的。