为了在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中测试了上述代码,但该代码无法正常工作,因此我在google chrome下对其进行了测试,并且可以正常工作。因此,让我改一下这个问题-可以在js中进行哪些更改,以使firefox不会发送上述字符串?
最佳答案
我遇到了同样的问题-只需替换
var ws = new WebSocket("ws://localhost:8080");
与
var ws = new WebSocket("ws://127.0.0.1:8080");
为我解决了这个问题。
关于c# - Firefox中的WebSockets,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14234573/