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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

2852閲覧

Unity UNET でサーバーから切断されたクライアントのアドレスを知りたい

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

2クリップ

投稿2017/06/21 09:09

お世話になります。
UNETを利用してローカルネットワーク上にある複数のクライアントにRPCを利用してのリモートプレイを作成しております。
実現したい事はサーバーとなる端末上で各クライアントとの接続状態をuGUIのスクロールビューで監視する事です。
現在行き詰っているのはサーバー側から各クライアントの接続状況を監視する箇所です。

Unityバージョンは 5.6.0f3
サーバー,クライアント間の接続処理はNetworkDiscoveryクラスを継承したクラスにて行っております。

以下のコードの OnServerDisconnect()にて引数 _conn のアドレスを取得したいのですが内容が空文字で取得できない状態です。

C#

1 2 //-------------------------------------------------------------- 3 // 新しいクライアントが接続に成功したとき、サーバー上で呼び出される. 4 public override void OnServerConnect( 5 NetworkConnection _conn ) { 6 base.OnServerConnect( _conn ); 7 8 Debug.Log( "Connect : " + _conn.address ); 9 } 10 11 12 //-------------------------------------------------------------- 13 // クライアントの接続が失われたか切断されたときにサーバー上で呼び出される. 14 public override void OnServerDisconnect( 15 NetworkConnection _conn ) { 16 base.OnServerDisconnect( _conn ); 17 18 Debug.Log( "Disconnect : " + _conn.address ); 19 }

このアプリケーションのログを見たところ以下の様になっておりました。
以下ログ

RemotePlayServerBase.OnSErverConnect()

(Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

Connect : ::ffff:192.168.100.105

(Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

OnServerConnect

(Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

The PlayerPrefab is empty on the NetworkManager. Please setup a PlayerPrefab object.

(Filename: C:/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

Log: connection {1} has been disconnected by timeout; address {::ffff:192.168.100.105:59553}
Disconnect :


Disconnect : の上の行ではアドレスが切断されたアドレスがわかるのですがDebug.Log()に来た際にはアドレス値が空になっております。

元々OnServerDisconnect()が来た時にはそのクライアントのアドレス値はすでに破棄されているのでしょうか?
それとも別の方法で各クライアントのアドレスが取得できるのでしょうか

よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

一応の解決が出来たのでここに方法を置いておきます。

C#

1// PREVENT_TIMEOUT_MSG には MsgType.Highest + 1 を入れています. 2NetworkManager.singleton.client.Send( PREVENT_TIMEOUT_MSG, new StringMessage(UnityEngine.Network.player.ipAddress ) ); 3

一定時間毎に上記の様にクライアントからサーバ宛にメッセージを送り、内容を自身のIpアドレスにすることでサーバー側にアドレスを送信しています。
一定時間メッセージを送信していないクライアントがいればそれが接続の切れたクライアントだという感じに判定しました。

投稿2017/06/28 05:19

編集2017/06/28 05:21
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

base.OnServerDisconnectの前でも破棄されていますか?

投稿2017/06/21 14:38

tmp

総合スコア277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/22 01:39

はい、base.OnServerDisconnect()を呼び出す前にもDebug.Log()を試しましたが同様にアドレスの内容は空でした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問