2013-08-16 98 views
0

我有一个应该与我的Sky + HD盒连接并暂停它的bash脚本。这是一个由该框支持的服务,因为它与iPhone/iPad应用程序的协议相同。用telnet“连接被外部主机关闭”的Bash脚本

有什么明显的,为什么它不会保持连接?

(echo 'POST /SkyPlay2 HTTP/1.1 
SOAPACTION: "urn:schemas-nds-com:service:SkyPlay:2#SetAVTransportURI" 
Content-Type: text/xml; charset=utf-8 
Content-Length: 399 

<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-nds-com:service:SkyPlay:2"><InstanceID>0</InstanceID><CurrentURI>xsi://'$line'</CurrentURI><CurrentURIMetaData>NOT_IMPLEMENTED</CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>') | telnet 192.168.1.82 49153 

回答

0

您的邮箱可能具有访问限制,使其不允许来自您运行脚本的计算机的连接。

作为一般性的建议:

  1. 做报价$line防止讨厌的事情发生,如:echo 'foo'"$list"'bar'(注意双引号);
  2. 而不是telnet,这意味着更多的交互使用,使用nc(netcat):echo 'stuff' | nc -n 192.168.1.82 49153;如果您的telnet在通过telnet协议特定的参数发送数据之前尝试变得聪明并且相互关联,这可能有助于解决连接问题;
  3. 因为你只使用一个命令,echo,发送数据时,你不需要在子shell中运行,所以括号不需要();
  4. 当您有多条线路输出,可以考虑使用的cat <<EOF代替echo(查找在bash的手册在这里的文档)
+0

非常感谢您的帮助!除了第一点我都明白,我应该引用什么,我没有? – user2689371

+0

在您粘贴的代码中,最后一行包含' xsi://'$ line'' - 正确的格式为' xsi://'“$ line”'' –

+0

nc -n是问题,它看起来像Sky + HD盒子不接受telnet(虽然它曾经) – user2689371

相关问题