2

C# で websocket サーバーを実装するために、Alchemy フレームワークを使用しています。私はこの問題で立ち往生しています。メソッド OnReceive で json オブジェクトをデシリアライズしようとすると、FormatException: "Incorrect format of the input string." が発生します。(英語では違うかもしれませんが、ローカライズされた例外メッセージが表示されます。それが私の翻訳です:P)。これについて奇妙なのは、出力すると、ブラウザから送信された Cookie の部分文字列であるcontext.DataFrame: が得られることです。111872281.1341000479.1335108793.1335108793.1335108793.1; __ad__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 を使用していますが、このライブラリでは問題ありません...

編集:もう1つ-ここのコードを参照しました: https://github.com/Olivine-Labs/Alchemy-Websockets-Example何も見つかりませんでした-つまり、著者がこれで行ったのと同じ方法ですべてを行っていますチュートリアル...

編集: Firefox v 17.0.1 で上記のコードをテストしていたのですが、うまくいかなかったので、Google chrome でテストしたところ、うまくいきました。では、質問を言い換えてみましょう。Firefox が前述の文字列を送信しないように、js でどのような変更を加えることができますか?

4

2 に答える 2

1

同じ問題に遭遇しました-単に交換するだけです

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

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

私の問題を修正しました。

于 2015-03-19T18:11:15.417 に答える
0

C# コンソール アプリでは、次を使用してクライアントをサーバーに接続します。

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

上記のコードは次を使用して接続しています

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

2 つの問題のうちの 1 つが考えられます -

  1. まず、代わりに WebSocketClient が機能するかどうかを確認します。
  2. URL の形式が ws://ur:port/context であることを確認します。これはしばらく私を失望させました。
于 2013-10-21T05:52:24.413 に答える