带有web-socket-js(flash)Lib的Fleck(c#)Server Lib

时间:2012-12-11 19:50:15

标签: c# html5 flash websocket

我一直在尝试在Fleck(C#websocket服务器实现)中使用web-socket-js(针对旧版浏览器的闪存驱动的websockets)获取echo服务器示例,并且遇到了问题。

我遇到的第一个问题是从端口843上传客户端访问策略。我放弃了,只是在Fleck的WebSocketConnection读取方法中添加了一些快速而脏的代码......

        if (body.StartsWith("<policy-file-request/>"))
        {
            FleckLog.Debug("Reveived Flash Policy File Request");

            var policyFile = @"<?xml version=""1.0""?><!DOCTYPE cross-domain-policy SYSTEM ""http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd""><cross-domain-policy><allow-access-from domain=""*"" to-ports=""*""/></cross-domain-policy>";
            byte[] bytes = new System.Text.UTF8Encoding().GetBytes(policyFile);

            Socket.Stream.Write(bytes, 0, bytes.Length);
            Socket.Stream.WriteByte(0);
            Socket.Stream.WriteByte(13);

            FleckLog.Debug("Flash Policy File Sent");

            return;
        }

现在它似乎挂了。这是日志...

web-socket-js logs:

LOG: [FLASH]:[WebSocket] debug enabled 
LOG: [FLASH]:[WebSocket] policy file: xmlsocket://localhost:843 
LOG: [FLASH]:[WebSocket] connected 
LOG: [FLASH]:[WebSocket] request header:
GET / HTTP/1.1
Host: localhost:8181
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: IVcOUW1sZkUxMGFNJ257dA==
Origin: http://localhost:6976
Sec-WebSocket-Version: 13
Cookie: 

从Fleck echo服务器我得到了这个......

12/11/2012 2:38:37 PM [Info] Server started at ws://localhost:8181
12/11/2012 2:38:43 PM [Debug] Client Connected
12/11/2012 2:38:43 PM [Debug] Received:
12/11/2012 2:38:43 PM [Debug] 23 bytes read
12/11/2012 2:38:43 PM [Debug] Received: <policy-file-request/>
12/11/2012 2:38:43 PM [Debug] Reveived Flash Policy File Request
12/11/2012 2:38:43 PM [Debug] Flash Policy File Sent
12/11/2012 2:38:43 PM [Debug] Client Connected
12/11/2012 2:38:43 PM [Debug] Received:
12/11/2012 2:38:43 PM [Debug] 194 bytes read
12/11/2012 2:38:43 PM [Debug] Received: GET / HTTP/1.1
Host: localhost:8181
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dgNDXk5mfWYPbVlnImYDEA==
Origin: http://localhost:6976
Sec-WebSocket-Version: 13
Cookie:

有没有人让这两个图书馆相处?我使用的是IE 9.0,Flash 11.5.502.110和.NET 4.0。此示例与web-socket-ruby / samples / echo_server.rb w / IE 9.0,Flash 11.5.502.110完美配合,Fleck示例回显服务器与Firefox / Chrome /等完美配合...

1 个答案:

答案 0 :(得分:0)

找到它。用于解析Web套接字请求中的标头的Fleck正则表达式过于严格,并且预计会出现Flash客户端未提供的换行符。

const string pattern = @"^(?<method>[^\s]+)\s(?<path>[^\s]+)\sHTTP\/1\.1\r\n" + // request line
                       @"((?<field_name>[^:\r\n]+):\s(?<field_value>[^\r\n]+)\r\n)+" + //headers
                       @"\r\n" + //newline*
                       @"(?<body>.+)?";