none
VisualStudioで実行してみたら、「対象のコンピューターによって拒否されたため、接続できませんでした」と出てきてシステムが終了してしまいました。 RRS feed

  • 質問

  • ハンドルされていない例外: System.Net.Sockets.SocketException: 対象のコンピューターによって拒否されたため、接続できませんでした。 127.0.0.1:39390
       場所 System.Net.Sockets.TcpClient..ctor(String hostname, Int32 port)
       場所 SimpleLiteM.Sketch.MMDCommand(String command) 場所 C:\AR開発ツール\NyARToolkitCS-master\NyARToolkitCS-master\forFW2.0\sample\SimpleLite_kenkyu\Program.cs:行 131
       場所 SimpleLiteM.Sketch.MMDSay(String text) 場所 C:\AR開発ツール\NyARToolkitCS-master\NyARToolkitCS-master\forFW2.0\sample\SimpleLite_kenkyu\Program.cs:行 118
       場所 SimpleLiteM.Sketch.loop(Device i_d3d) 場所 C:\AR開発ツール\NyARToolkitCS-master\NyARToolkitCS-master\forFW2.0\sample\SimpleLite_kenkyu\Program.cs:行 82
       場所 NyARToolkitCSUtils.Direct3d.D3dSketch.run() 場所 C:\AR開発ツール\NyARToolkitCS-master\NyARToolkitCS-master\forFW2.0\NyARToolkitCSUtils\Direct3d\sketch\D3dSketch.cs:行 95
       場所 SimpleLiteM.Sketch.Main(String[] args) 場所 C:\AR開発ツール\NyARToolkitCS-master\NyARToolkitCS-master\forFW2.0\sample\SimpleLite_kenkyu\Program.cs:行 110

    ソースコードは以下となります。

    using System;
    using System.Drawing;
    using System.Collections.Generic;
    using System.Text;
    using jp.nyatla.nyartoolkit.cs.core;
    using jp.nyatla.nyartoolkit.cs.markersystem;
    using NyARToolkitCSUtils;
    using NyARToolkitCSUtils.Direct3d;
    using NyARToolkitCSUtils.Capture;
    using Microsoft.DirectX;
    using Microsoft.DirectX.Direct3D;
    using System.ComponentModel;
    using System.Data;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
    using System.IO;



    namespace SimpleLiteM
    {
        /// <summary>
        /// このサンプルプログラムは、patt.kanjiとpatt.hiroマーカのそれぞれに、立方体を表示します。
        /// kenkyu_satoya
        /// </summary>
        class Sketch : D3dSketch
        {
            private const int SCREEN_WIDTH = 640;
            private const int SCREEN_HEIGHT = 480;
            private const String AR_CODE_FILE1 = "../../../../../data/patt.hiro";
            private const String AR_CODE_FILE2 = "../../../../../data/patt.Kanji";

            private NyARD3dMarkerSystem _ms;
            private NyARDirectShowCamera _ss;
            private NyARD3dRender _rs;
            private int mid1;
            private int mid2;
            public override void setup(CaptureDevice i_cap)
            {
                Device d3d = this.size(SCREEN_WIDTH, SCREEN_HEIGHT);
                i_cap.PrepareCapture(SCREEN_WIDTH, SCREEN_HEIGHT, 30.0f);
                INyARMarkerSystemConfig cf = new NyARMarkerSystemConfig(SCREEN_WIDTH, SCREEN_HEIGHT);
                d3d.RenderState.ZBufferEnable = true;
                d3d.RenderState.Lighting = false;
                d3d.RenderState.CullMode = Cull.CounterClockwise;
                this._ms = new NyARD3dMarkerSystem(cf);
                this._ss = new NyARDirectShowCamera(i_cap);
                this._rs = new NyARD3dRender(d3d, this._ms);
                this.mid1 = this._ms.addARMarker(AR_CODE_FILE1, 16, 25, 80);
                this.mid2 = this._ms.addARMarker(AR_CODE_FILE2, 16, 25, 80);

                //set View mmatrix
                this._rs.loadARViewMatrix(d3d);
                //set Viewport matrix
                this._rs.loadARViewPort(d3d);
                //setD3dProjectionMatrix
                this._rs.loadARProjectionMatrix(d3d);
                this._ss.start();
            }

            public override void loop(Device i_d3d)
            {
                lock (this._ss)
                {
                    this._ms.update(this._ss);
                    this._rs.drawBackground(i_d3d, this._ss.getSourceImage());
                    i_d3d.BeginScene();
                    i_d3d.Clear(ClearFlags.ZBuffer, Color.DarkBlue, 1.0f, 0);
                    if (this._ms.isExist(this.mid1))
                    {
                        //立方体を50mm上(マーカーの上)にずらしておく
                        Matrix transform_mat2 = Matrix.Translation(0, 0, 50.0f);
                        //変換行列を掛ける
                        transform_mat2 *= this._ms.getD3dTransformMatrix(this.mid1);
                        // 計算したマトリックスで座標変換
                        i_d3d.SetTransform(TransformType.World, transform_mat2);
                        // レンダリング(描画)
                        this._rs.colorCube(i_d3d, 40);
                        MMDSay("ヒロマーカーを認識したよ");//MMDしゃべる
                    }



                    if (this._ms.isExist(this.mid2))
                    {
                        //立方体を20mm上(マーカーの上)にずらしておく
                        Matrix transform_mat2 = Matrix.Translation(0, 0, 20.0f);
                        //変換行列を掛ける
                        transform_mat2 *= this._ms.getD3dTransformMatrix(this.mid2);
                        // 計算したマトリックスで座標変換
                        i_d3d.SetTransform(TransformType.World, transform_mat2);
                        // レンダリング(描画)
                        this._rs.colorCube(i_d3d, 40);
                        MMDSay("漢字マーカーを認識したよ");//MMDしゃべる;
                    }

                    i_d3d.EndScene();
                }
                i_d3d.Present();
            }
            public override void cleanup()
            {
                this._rs.Dispose();
            }
            static void Main(string[] args)
            {
                new Sketch().run();
            }




            private static void MMDSay(string text)
            {
                MMDCommand("SYNTH_START|mei|mei_voice_happiness|" + text);
            }


            private static void MMDCommand(string command)
            {
                //サーバーのIPアドレス(または、ホスト名)とポート番号

                string ipOrHost = "localhost";
                  //System.Net.IPAddress ipAdd = System.Net.IPAddress.Parse(ipString);
                int port = 39390;

                //TcpClientを作成し、サーバーと接続する
                System.Net.Sockets.TcpClient tcp =
                   new System.Net.Sockets.TcpClient(ipOrHost, port);
                Console.WriteLine("サーバー({0}:{1})と接続しました({2}:{3})。",
                    ((System.Net.IPEndPoint)tcp.Client.RemoteEndPoint).Address,
                    ((System.Net.IPEndPoint)tcp.Client.RemoteEndPoint).Port,
                    ((System.Net.IPEndPoint)tcp.Client.LocalEndPoint).Address,
                    ((System.Net.IPEndPoint)tcp.Client.LocalEndPoint).Port);

                //NetworkStreamを取得する
                System.Net.Sockets.NetworkStream ns = tcp.GetStream();

                //読み取り、書き込みのタイムアウトを10秒にする
                //デフォルトはInfiniteで、タイムアウトしない
                //(.NET Framework 2.0以上が必要)
             ns.ReadTimeout = 10000;
             ns.WriteTimeout = 10000;

           string sendMsg = command;
                //何も入力されなかった時は終了
                if (sendMsg == null || sendMsg.Length == 0)
                {
                    return;
                }


                //サーバーにデータを送信する
                //文字列をByte型配列に変換
                System.Text.Encoding enc = System.Text.Encoding.GetEncoding("Shift-JIS");
                byte[] sendBytes = enc.GetBytes(sendMsg);
                //データを送信する
                ns.Write(sendBytes, 0, sendBytes.Length);
                Console.WriteLine(sendMsg);

                //サーバーから送られたデータを受信する
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                byte[] resBytes = new byte[256];
                int resSize = 0;
                do
                {
                    //データの一部を受信する
                    resSize = ns.Read(resBytes, 0, resBytes.Length);
                    //Readが0を返した時はサーバーが切断したと判断
                    if (resSize == 0)
                    {
                        Console.WriteLine("サーバーが切断しました。");
                        break;
                    }
                    //受信したデータを蓄積する
                    ms.Write(resBytes, 0, resSize);
                    //まだ読み取れるデータがあるか、データの最後が\nでない時は、
                    // 受信を続ける
                } while (ns.DataAvailable || resBytes[resSize - 1] != '\n');
                //受信したデータを文字列に変換
                string resMsg = enc.GetString(ms.GetBuffer(), 0, (int)ms.Length);
                ms.Close();
                //末尾の\nを削除

                resMsg = resMsg.TrimEnd('\n');
                Console.WriteLine(resMsg);
                ns.Close();

                //閉じる
                tcp.Close();
                Console.WriteLine("切断しました。");

                Console.ReadLine();
            }

        }
    }





        
    using System.Drawing;
    using System.Collections.Generic;
    using System.Text;
    using jp.nyatla.nyartoolkit.cs.core;
    using jp.nyatla.nyartoolkit.cs.markersystem;
    using NyARToolkitCSUtils;
    using NyARToolkitCSUtils.Direct3d;
    using NyARToolkitCSUtils.Capture;
    using Microsoft.DirectX;
    using Microsoft.DirectX.Direct3D;
    using System.ComponentModel;
    using System.Data;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
    using System.IO;



    namespace SimpleLiteM
    {
        /// <summary>
        /// このサンプルプログラムは、patt.kanjiとpatt.hiroマーカのそれぞれに、立方体を表示します。
        /// kenkyu_satoya
        /// </summary>
        class Sketch : D3dSketch
        {
            private const int SCREEN_WIDTH = 640;
            private const int SCREEN_HEIGHT = 480;
            private const String AR_CODE_FILE1 = "../../../../../data/patt.hiro";
            private const String AR_CODE_FILE2 = "../../../../../data/patt.Kanji";

            private NyARD3dMarkerSystem _ms;
            private NyARDirectShowCamera _ss;
            private NyARD3dRender _rs;
            private int mid1;
            private int mid2;
            public override void setup(CaptureDevice i_cap)
            {
                Device d3d = this.size(SCREEN_WIDTH, SCREEN_HEIGHT);
                i_cap.PrepareCapture(SCREEN_WIDTH, SCREEN_HEIGHT, 30.0f);
                INyARMarkerSystemConfig cf = new NyARMarkerSystemConfig(SCREEN_WIDTH, SCREEN_HEIGHT);
                d3d.RenderState.ZBufferEnable = true;
                d3d.RenderState.Lighting = false;
                d3d.RenderState.CullMode = Cull.CounterClockwise;
                this._ms = new NyARD3dMarkerSystem(cf);
                this._ss = new NyARDirectShowCamera(i_cap);
                this._rs = new NyARD3dRender(d3d, this._ms);
                this.mid1 = this._ms.addARMarker(AR_CODE_FILE1, 16, 25, 80);
                this.mid2 = this._ms.addARMarker(AR_CODE_FILE2, 16, 25, 80);

                //set View mmatrix
                this._rs.loadARViewMatrix(d3d);
                //set Viewport matrix
                this._rs.loadARViewPort(d3d);
                //setD3dProjectionMatrix
                this._rs.loadARProjectionMatrix(d3d);
                this._ss.start();
            }

            public override void loop(Device i_d3d)
            {
                lock (this._ss)
                {
                    this._ms.update(this._ss);
                    this._rs.drawBackground(i_d3d, this._ss.getSourceImage());
                    i_d3d.BeginScene();
                    i_d3d.Clear(ClearFlags.ZBuffer, Color.DarkBlue, 1.0f, 0);
                    if (this._ms.isExist(this.mid1))
                    {
                        //立方体を50mm上(マーカーの上)にずらしておく
                        Matrix transform_mat2 = Matrix.Translation(0, 0, 50.0f);
                        //変換行列を掛ける
                        transform_mat2 *= this._ms.getD3dTransformMatrix(this.mid1);
                        // 計算したマトリックスで座標変換
                        i_d3d.SetTransform(TransformType.World, transform_mat2);
                        // レンダリング(描画)
                        this._rs.colorCube(i_d3d, 40);
                        MMDSay("ヒロマーカーを認識したよ");//MMDしゃべる
                    }



                    if (this._ms.isExist(this.mid2))
                    {
                        //立方体を20mm上(マーカーの上)にずらしておく
                        Matrix transform_mat2 = Matrix.Translation(0, 0, 20.0f);
                        //変換行列を掛ける
                        transform_mat2 *= this._ms.getD3dTransformMatrix(this.mid2);
                        // 計算したマトリックスで座標変換
                        i_d3d.SetTransform(TransformType.World, transform_mat2);
                        // レンダリング(描画)
                        this._rs.colorCube(i_d3d, 40);
                        MMDSay("漢字マーカーを認識したよ");//MMDしゃべる;
                    }

                    i_d3d.EndScene();
                }
                i_d3d.Present();
            }
            public override void cleanup()
            {
                this._rs.Dispose();
            }
            static void Main(string[] args)
            {
                new Sketch().run();
            }




            private static void MMDSay(string text)
            {
                MMDCommand("SYNTH_START|mei|mei_voice_happiness|" + text);
            }


            private static void MMDCommand(string command)
            {
                //サーバーのIPアドレス(または、ホスト名)とポート番号

                string ipOrHost = "localhost";
                  //System.Net.IPAddress ipAdd = System.Net.IPAddress.Parse(ipString);
                int port = 39390;

                //TcpClientを作成し、サーバーと接続する
                System.Net.Sockets.TcpClient tcp =
                   new System.Net.Sockets.TcpClient(ipOrHost, port);
                Console.WriteLine("サーバー({0}:{1})と接続しました({2}:{3})。",
                    ((System.Net.IPEndPoint)tcp.Client.RemoteEndPoint).Address,
                    ((System.Net.IPEndPoint)tcp.Client.RemoteEndPoint).Port,
                    ((System.Net.IPEndPoint)tcp.Client.LocalEndPoint).Address,
                    ((System.Net.IPEndPoint)tcp.Client.LocalEndPoint).Port);

                //NetworkStreamを取得する
                System.Net.Sockets.NetworkStream ns = tcp.GetStream();

                //読み取り、書き込みのタイムアウトを10秒にする
                //デフォルトはInfiniteで、タイムアウトしない
                //(.NET Framework 2.0以上が必要)
             ns.ReadTimeout = 10000;
             ns.WriteTimeout = 10000;

           string sendMsg = command;
                //何も入力されなかった時は終了
                if (sendMsg == null || sendMsg.Length == 0)
                {
                    return;
                }


                //サーバーにデータを送信する
                //文字列をByte型配列に変換
                System.Text.Encoding enc = System.Text.Encoding.GetEncoding("Shift-JIS");
                byte[] sendBytes = enc.GetBytes(sendMsg);
                //データを送信する
                ns.Write(sendBytes, 0, sendBytes.Length);
                Console.WriteLine(sendMsg);

                //サーバーから送られたデータを受信する
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                byte[] resBytes = new byte[256];
                int resSize = 0;
                do
                {
                    //データの一部を受信する
                    resSize = ns.Read(resBytes, 0, resBytes.Length);
                    //Readが0を返した時はサーバーが切断したと判断
                    if (resSize == 0)
                    {
                        Console.WriteLine("サーバーが切断しました。");
                        break;
                    }
                    //受信したデータを蓄積する
                    ms.Write(resBytes, 0, resSize);
                    //まだ読み取れるデータがあるか、データの最後が\nでない時は、
                    // 受信を続ける
                } while (ns.DataAvailable || resBytes[resSize - 1] != '\n');
                //受信したデータを文字列に変換
                string resMsg = enc.GetString(ms.GetBuffer(), 0, (int)ms.Length);
                ms.Close();
                //末尾の\nを削除

                resMsg = resMsg.TrimEnd('\n');
                Console.WriteLine(resMsg);
                ns.Close();

                //閉じる
                tcp.Close();
                Console.WriteLine("切断しました。");

                Console.ReadLine();
            }

        }
    }





        
    2018年9月20日 5:45

すべての返信

  • 丸投げですか?

    メッセージの通り、・・・といいたいところですが、ちょっとわかりにくいか。
    接続先が待ち受けていない為に発生します。IP アドレスやホスト名、サービスが受け付けているポート番号を確認してください。それらが合っているという場合は、ファイアーウォールの設定を確認してみてください。それらも大丈夫なら、サービスが起動しているか確認。それも大丈夫なら、サービスがバインドしているアドレスやポートを確認します。

    追記

    localhost か。サーバーアプリケーションが動いていますか?動いている場合、127.0.0.1 以外のアドレスにバインドしていませんか?


    Jitta@わんくま同盟


    • 編集済み Jitta 2018年9月22日 2:30 サーバー側で見るところを追記
    2018年9月20日 13:32