代码之家  ›  专栏  ›  技术社区  ›  Biranchi

流套接字客户端无法连接(连接超时)

  •  12
  • Biranchi  · 技术社区  · 15 年前

    我正在使用证书和私钥

    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', $certfile);
    stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
    $fp = stream_socket_client('ssl://gateway.xyz.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
    

    它在本地XAMPP服务器中运行,但不在外部服务器中工作:

    警告:stream_socket_client()[函数.stream socket client]:无法连接到ssl://gateway.sandbox.push.apple.com:2195(连接超时)in/home/biranchi/public_html/push.php on line 42

    连接110失败

    错误是什么?是否需要更改服务器中的某些设置?

    3 回复  |  直到 9 年前
        1
  •  18
  •   palaniraja    15 年前

    我通过打开生产服务器上的端口2195解决了这个问题。您可以通过以下命令进行验证$ telnet网关.push.apple.com 2195

    -bash-3.2# telnet gateway.push.apple.com 2195
    
    Trying 17.149.38.141...
    Connected to gateway.push.apple.com (17.149.38.141).
    Escape character is '^]'.
    Connection closed by foreign host.
    
        2
  •  4
  •   Jeremy Morgan    15 年前

    检查你的个人防火墙设置,确保你没有阻止它。尝试禁用防火墙。

    另外,一些API喜欢请求来自实际域而不是桌面。我没有理由相信苹果是这样运作的,但这也是需要检查的。

    还要确保和ping gateway.sandbox.push.apple.com连接良好。

        3
  •  1
  •   Community CDub    8 年前

    您必须将防火墙设置为允许所有17.0.0.0/8块(它都属于Apple!)检查 THIS ANSWER

    根据 Apple :

    APN服务器使用负载平衡,因此您的设备不会总是连接到相同的公共IP地址进行通知。最好允许访问分配给苹果的整个17.0.0.0/8地址块上的这些端口。

    如果您使用的是CSF防火墙(如我),我建议您将此行添加到csf.allow文件:

    tcp|out|d=2195|d=17.0.0.0/8

    使用这个而不是仅仅“17.0.0.0/8”,将只允许外挂连接到苹果,特别是端口2195。国家安全局不喜欢,但这更精确更安全!;)