Firefox中的WebSockets

时间:2013-01-09 11:49:46

标签: c# javascript firefox websocket

为了在C#中实现我的websocket服务器,我正在使用Alchemy框架。我坚持这个问题。在我尝试反序列化json对象的OnReceive方法中,我得到一个FormatException: “输入字符串的格式不正确。” (也许它在英语方面有所不同,但我得到了一个本地化的异常消息,那就是我的翻译:P)。奇怪的是,当我打印出context.DataFrame时,我得到:111872281.1341000479.1335108793.1335108793.1335108793.1; __ad这是浏览器发送的Cookie的子字符串:__gutp=entrystamp%3D1288455757%7Csid%3D65a51a83cbf86945d0fd994e15eb94f9%7Cstamp%3D1288456520%7Contime%3D155; __utma=111872281.1341000479.1335108793.1335108793.1335108793.1; __adtaily_ui=cupIiq90q9

JS代码:

// I'm really not doing anything more than this
var ws = new WebSocket("ws://localhost:8080");

C#代码:

static void Main(string[] args) {
    int port = 8080;

    WebSocketServer wsServer = new WebSocketServer(port, IPAddress.Any) {
        OnReceive = OnReceive,
        OnSend = OnSend,
        OnConnect = OnConnect,
        OnConnected = OnConnected,
        OnDisconnect = OnDisconnect,
        TimeOut = new TimeSpan(0, 5, 0)
    };

    wsServer.Start();

    Console.WriteLine("Server started listening on port: " + port + "...");

    string command = string.Empty;

    while (command != "exit") {
        command = Console.ReadLine();
    }

    Console.WriteLine("Server stopped listening on port: " + port + "...");

    wsServer.Stop();

    Console.WriteLine("Server exits...");
}

public static void OnReceive(UserContext context) {
    string json = "";
    dynamic obj;

    try {
        json = context.DataFrame.ToString();
        Console.WriteLine(json);
        obj = JsonConvert.DeserializeObject(json);
    } catch (Exception e) {
        Console.WriteLine(e.Message);
        Console.WriteLine(e.StackTrace);

        return;
    }
}

在C#方面我使用的是Newtonsoft.Json,虽然这个库没有问题......

编辑: 还有一件事 - 我浏览了这里的代码:https://github.com/Olivine-Labs/Alchemy-Websockets-Example并没有发现任何东西 - 我的意思是,我做的一切都和作者在本教程中所做的一样......

编辑: 我在Firefox v 17.0.1中测试了上面的代码,它没有用,所以我在谷歌浏览器下测试它,它的工作原理。那么让我重新解释一下这个问题 - 在js中可以进行哪些更改,以便firefox不会发送上述字符串?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题 - 只需更换

var ws = new WebSocket("ws://localhost:8080");

var ws = new WebSocket("ws://127.0.0.1:8080");

为我解决了这个问题。

答案 1 :(得分:0)

在C#console app中,我使用以下命令将客户端连接到服务器:

var aClient = new WebSocketClient(@"ws://127.0.0.1:81/beef");

上面的代码是使用

连接的
var ws = new WebSocket("ws://localhost:8080");

可能存在两个问题之一 -

  1. 首先要看看WebSocketClient是否正常工作。
  2. 要确保您的网址格式为ws:// ur:port / context。这让我失去了一段时间。