我一直试图让event connection在我的Apple TV上运行一段时间,但我似乎无法弄清楚我做错了什么。
我写了我的请求,我得到了正确的答复。但是当我暂停或视频停止时,我没有收到任何事件。
事件连接的相关代码如下:
var endpoint = new IPEndPoint(IPAddress.Parse("192.168.13.37"), 23579);
var socket = new Socket(endpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(endpoint);
socket.Connect("192.168.13.13", 7000);
socket.NoDelay = true;
var request = Encoding.UTF8.GetBytes("POST /Reverse HTTP/1.1\r\nConnection: Upgrade\r\nUpgrade: PTTH/1.0\r\nX-Apple-Purpose: event\r\nUser-Agent: ItsMe/5.7\r\nX-Apple-Session-ID: f519e023-da6d-4fc2-902f-791c07dd9ff8\r\nContent-Length: 0\r\n\r\n");
socket.Send(request, request.Length, 0);
var response = new Byte[4096];
var read = socket.Receive(response, response.Length, 0);
var result = Encoding.UTF8.GetString(response, 0, read);
Apple TV的回应:
HTTP/1.1 101 Switching Protocols
Date: Thu, 23 Feb 2012 17:33:41 GMT
Upgrade: PTTH/1.0
Connection: Upgrade
我的第一次尝试此时我关闭了套接字并启动了TcpListener
(也尝试了HttpListener
)。所有这三种方法都完全无效,只是为了完整我将包括我当前的代码(这不起作用)。我目前回到TcpListener
:
socket.Disconnect(true);
socket.Close();
var listener = new TcpListener(lep);
listener.ExclusiveAddressUse = true;
listener.Start();
while (true)
{
var client = listener.AcceptTcpClient();
using (var reader = new StreamReader(client.GetStream()))
{
while (isRunning)
{
if (reader.Peek() != -1)
{
Console.WriteLine(reader.ReadLine());
}
}
}
client.Close();
}
我不打算保留while (true)
,但在我收到活动并且知道视频何时停止播放之前,我没有别的东西放在那里。
我首先执行此部分,然后发送一个带有URL的play
命令到我的机器上的文件,它开始在Apple TV上正常播放。我也可以发送scrub
命令并获取有关位置/持续时间的信息,但不会发生任何事件。
非常感谢任何帮助/建议。
答案 0 :(得分:0)
我认为你对Connection如何运作做出错误的假设:
在发布UPGRADE请求之前,您可能需要一个打开的http-listener来处理传入的事件。
请参阅此处以供参考:http://tools.ietf.org/id/draft-lentczner-rhttp-00.txt