gpt4 book ai didi

android - Perl IO::Socket::SSL 持久 TCP 连接

转载 作者:太空宇宙 更新时间:2023-11-03 15:09:42 24 4
gpt4 key购买 nike

我正在编写用于与 android GCM CCS 通信的 perl 脚本。我的脚本如下所示:

use IO::Socket::SSL;

my $client = IO::Socket::SSL->new('gcm.googleapis.com:5236')
or die "error=$!, ssl_error=$SSL_ERROR";

print $client '<stream:stream to="gcm.googleapis.com" version="1.0"
#xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams"/>';
print <$client>;
print $client '<auth mechanism="PLAIN"
xmlns="urn:ietf:params:xml:ns:xmpp-sasl">MTI2MjAwMzQ3OTMzQHByb2plY3RzLmdjbS5hb
mFTeUIzcmNaTmtmbnFLZEZiOW1oekNCaVlwT1JEQTJKV1d0dw==</auth>';

if(!<$client>){
print "Auth error\n";
} else {
print <$client>;
}

在套接字上写入第一个请求后,我从谷歌服务器得到了预期的响应。而且我无法使用 print 打印服务器响应但是,在写完第二个请求后我没有得到任何回应。似乎连接在第一次请求和响应之后关闭。如何通过开放的 TLS 连接发送多个请求并接收服务器响应?

更新

如果我打开调试,我会得到以下信息

DEBUG: .../IO/Socket/SSL.pm:1464: new ctx 145780168
DEBUG: .../IO/Socket/SSL.pm:332: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:334: socket connected
DEBUG: .../IO/Socket/SSL.pm:347: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:390: Net::SSLeay::connect -> 1
DEBUG: .../IO/Socket/SSL.pm:445: ssl handshake done
write_all VM at entry=vm_unknown
written so far 124:124 bytes (VM=vm_unknown)
write_all VM at entry=vm_unknown
written so far 188:188 bytes (VM=vm_unknown)
got 147:0 bytes (VM=vm_unknown).
got 197:147 bytes (VM=vm_unknown).
got 0:344 bytes (VM=vm_unknown).
got 0:0 bytes (VM=vm_unknown).
DEBUG: .../IO/Socket/SSL.pm:1201: SSL read errorerror:00000000:lib(0):func(0):reason(0)

<stream:stream from="gcm.googleapis.com" id="626DAFBE58C7FD0D" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"><stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-OAUTH2</mechanism><mechanism>X-GOOGLE-TOKEN</mechanism><mechanism>PLAIN</mechanism></mechanisms></stream:features>Auth error
DEBUG: .../IO/Socket/SSL.pm:1500: free ctx 145780168 open=145780168
DEBUG: .../IO/Socket/SSL.pm:1508: OK free ctx 145780168

最佳答案

DEBUG: .../IO/Socket/SSL.pm:1201: SSL read errorerror:00000000:lib(0):func(0):reason(0)

服务器关闭了连接。如果服务器决定关闭连接,您无法保持连接打开并发送更多。关闭可能与您收到的身份验证错误有关。

还有:

print <$client>;

您正在调用 <>列表上下文中的运算符。这意味着它将尝试从套接字中读取所有 行。由于 所有 行仅在服务器关闭连接后才完成(这是 TCP 的工作方式,与 TLS 无关),您实际上是在此处等待,直到服务器关闭。

关于android - Perl IO::Socket::SSL 持久 TCP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29994943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com