質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • Unity

    6012questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • WebSocket

    217questions

    WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

WebSocketSharpを使って通信をしたい(Unity)

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,203

peter_kes

score 12

WebsocketSharpプラグインをつかって通信を成功させたいのですが、
ほぼサンプルのコードのままなのに、sendでメッセージを送ると
InvalidOperationException: The current state of the connection is not Open.
と出てしまいます。

これがコードになります。
Client側

<code> 
using System;
using System.Collections.Generic;
using UnityEngine;
using WebSocketSharp;
public class WebsocketAccessor : MonoBehaviour
{
    private WebSocket ws;

    void Start()
    {

        ws = new WebSocket("ws://localhost:8088/");

        ws.OnOpen += (sender, e) =>
        {
            Debug.Log("Opended");
        };
        ws.OnMessage += (sender, e) =>
        {
            Debug.Log("Received " + e.Data);
        };

        ws.OnError += (sender, e) => 
        {
            Debug.Log("ERROR");
        };
        ws.Connect ();

    }


    public void StartSend(string message)
    {
        // 送るボタンを押すと入力された文字列データを送信する
        ws.Send (message);

    }
    private void OnDestroy()
    {
        // 接続を切る.
        ws.Close();
    }
}

サーバー側

<code> 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using WebSocketSharp;
using WebSocketSharp.Server;

//exmample 
public class Program : MonoBehaviour {

    void Awake () {

        //var wssv = new WebSocketServer ("ws://dragonsnest.far");
        var wssv = new WebSocketServer (8088);
        wssv.AddWebSocketService<Laputa> ("/Laputa");
        wssv.Start ();
        //Console.ReadKey (true);
        //wssv.Stop ();

    }

}

―――――――---------------------------------
using System;
using WebSocketSharp;
using WebSocketSharp.Server;
using UnityEngine;

//example
public class Laputa : WebSocketBehavior{

    protected override void OnOpen()
    {
        Debug.Log ("opend");
    }

    protected override void OnMessage (MessageEventArgs e)
    {
        var msg = e.Data == "BALUS"
            ? "I've been balused already..."
            : "I'm not available now.";

        Send (msg);
    }
}

Open というメッセージがでないので Openになっていないのですが、
どうしてOpenにならないのでしょうか?
PCで何か設定しないとブロックされてしまっているのでしょうか?
ws = new WebSocket("ws://localhost:8088/"); URLとポートがおかしいんでしょうか?
ご教授お願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

あんまりコード読んでないです。

お願い
質問文のソースコードはコードタグで囲ってくださいな。

1,クライアント側の接続先 WebSocketサーバーをws://echo.websocket.org/に変更してクライアント側が正しくサーバーに接続できることを確認してくださいな。

2,サーバー側のマシンでコマンドプロンプトよりnetstat -anop tcpを実行してポート番号:8088で待ち受けているのを確認してくださいな。


3,サーバー側のコードが違います。
3-1,サーバー側のエンドポイント(/Laputa)がクライアント(/)と違います。
3-2,wssvがローカル変数(var)で宣言されています。

public class Program : MonoBehaviour {
    private WebSocketServer wssv;
    void Awake () {
        wssv = new WebSocketServer(8088);
        wssv.AddWebSocketService<Laputa>("/");
        wssv.Start();
    }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/24 14:27

    ws = new WebSocket("ws://xxx.xxx.xxx.xxx:8088/Laputa"); がダメなんでしょうか?

    キャンセル

  • 2018/04/24 14:35

    >peter_kesさんへ
    1,まず、プログラムの問題ではなく、ネットワークの設定だと思うのですが。
    2,普通のHTTPサーバーを試しに立ててみて、接続できるかどうかでしょうか。
    3,疎通テストとして、ここを使ってみるとか、https://websocket.org/echo.html
    4,Unityではなく普通の.net C#のプログラムで確認してみる。
    5,Unityのフォーラムにソースコード付きで質問してみる。

    最初の質問と問題ももう離れていますし、個人的にはネットワーク設定のサポートセンターではないので自力でなんとかしてほしいのですが。

    キャンセル

  • 2018/04/24 14:44

    https://websocket.org/echo.htmlは、成功しています。
    ちょっとumyuの親切な回答に甘えてしまいました。すみませんでした。コードじゃなくネットワークの設定がおかしいと確信が得ただけでもありがたいです。とりあえず、この質問はベストアンサーを選んでクローズします。4.は是非試してみたいと思います。色々御回答していただき本当に感謝してしております。ありがとうございました!(^^)!

    キャンセル

0

クライアント側に/Palutaをいれたら
ws = new WebSocket("ws://localhost:8088/Laputa");
解決いたしました!!!
本当にいつも回答してくださいましてありがとうございます。感謝しております!!!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Unity

    6012questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • WebSocket

    217questions

    WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。