perl – 从头开始??的简单websocket服务器无效
发布时间:2020-12-16 06:21:18 所属栏目:大数据 来源:网络整理
导读:使用perl从头开始创建一个简单的websocket服务器,当从Chrome指向它时(使用 echo test),在WebSocket握手期间出现错误错误:错误的’Sec-WebSocket-Accept’标头值. 很确定为websocket握手返回的密钥是正确的.有任何想法吗? use IO::Socket;use IO::Select;us
使用perl从头开始创建一个简单的websocket服务器,当从Chrome指向它时(使用
echo test),在WebSocket握手期间出现错误错误:错误的’Sec-WebSocket-Accept’标头值.
很确定为websocket握手返回的密钥是正确的.有任何想法吗? use IO::Socket; use IO::Select; use Digest::SHA1 qw(sha1 sha1_hex sha1_base64); $servSock = IO::Socket::INET->new( Proto => 'tcp',LocalPort => 8080,Reuse => 1,Listen => 500 ) || die "failed to setup outsock $@n"; $s = IO::Select->new(); $s -> add ($servSock); my @readySocks; while (1) { @readySocks = $s->can_read(5); foreach $sock (@readySocks) { if ($sock eq $servSock) { #print "inSockn"; $clientSock = $servSock->accept(); setsockopt($clientSock,IPPROTO_TCP,TCP_NODELAY,1); $s->add ($clientSock); } else { #print "outsockn"; $buff = ""; $fromAddr = recv $sock,$buff,1470,0; if (length($buff) <= 0) { $s->remove($sock); close $sock; $numOfConns --; next; } printf "recved %d bytesn",length($buff); if ($buff =~ /Sec-WebSocket-Key: (S+)/) { $str = $1; print "key is $str|n"; my $str = sha1_base64($str . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); send ($sock,qq{HTTP/1.1 101 Switching Protocolsr Connection: Upgrader Upgrade: websocketr Sec-Websocket-Accept: $strr rn},0); } } } } 注意:我需要从头开始创建一个作为另一个项目的一部分. 更新 感谢@ steffen-ullrich的建议,将其改为 send ($sock,0); to(注意$str现在是$str =) send ($sock,qq{HTTP/1.1 101 Switching Protocolsr Connection: Upgrader Upgrade: websocketr Sec-Websocket-Accept: $str=r rn},0); 使它工作. 解决方法
从
documentation of sha1_bas64:
并且如上所述添加’=’是您的代码缺失的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |