質問: new TcpClient(System.Net.IPAddress.Any.ToString(), port); Debug.Log("success conn server"); //NetworkStreamを取得する return tcp.GetStream(); } ### 試したこと Try chatch でエラーハンドルを入れても何も解決しません。 ネットの解決方法色々試しました。たとえば、while(!server.Pending())を入れてみたり、Thread.sleep(1000)をいれてみたり... ### 補足情報(FW/ツールのバージョンなど) Unityは2017.2.0f3
回答: **Unityはサンプルを弄ったレベルですが、TcpListenerの使い方が気になったので回答します。** > > UnityでTCPを利用したチャットのやりとりをできるようにしたいんです。 > > > この件は`Unity WebSocket`のキーワードで検索してみるのをお勧め致します。 `TcpListener`を使うより楽に開発できるかと。 以下は質問文のコードについての回答です。 1,`TcpListener#Start`メソッドの呼び出しを行い受信ポートを`Listen`状態にする必要があります。 2,`TcpListener#EndAcceptTcpClient`した直後に`TcpListener#BeginAcceptTcpClient`をして次のAcceptを非同期で待機する必要があります。 `DoAcceptTcpClientCallback`の宣言に`static`が付いているのが気になります。 コンパイルを通してませんが、以下のような形にもできると思います。 ``` private TcpListener server = null; // public void ServerStart() { int port = 2222; this.server = new TcpListener(System.Net.IPAddress.Any, port); this.server.Start(); this.server.BeginAcceptTcpClient(new AsyncCallback(this.DoAcceptTcpClientCallback), this.server); } public void DoAcceptTcpClientCallback(IAsyncResult ar) { var listener = res.AsyncState as TcpListener; // EndAcceptTcpClient呼び出し時にObjectDisposedExceptionが発生する可能性があるので、例外をキャッチするか、 var client = listener.EndAcceptTcpClient(res); // 次のAcceptを非同期で呼び出し。 listener.BeginAcceptTcpClient(new AsyncCallback(this.DoAcceptTcpClientCallback), listener); Task.Factory.StartNew(() => { //これ以降は各クライアントで行いたい処理。 var stream = client.GetStream(); }); } ``` ◇参考情報 C# TCP通信の複数クライアント