Mosquitto_sub 対象のコンピューターによって拒否されたため、接続できませんでした。

ここに書いてある通りPGを作って無事動いたのですが、サーバとクライアントを分けて実行
すると動かない!
http://dobon.net/vb/dotnet/internet/tcpclientserver.html

こんなエラーがでます。

「対象のコンピュータによって拒否されたため、接続できませんでした。」
「対象のコンピューターによって拒否されたため、接続できませんでした。」

で接続できない。

悩んだ結果、ようは接続許可をlocalhostにしかしてなかったせでした。
TcpListenerを作るときにlocalhostでしてたから、他から接続できなかったんですね。

System.Net.Sockets.TcpListener listener =
new System.Net.Sockets.TcpListener( System.Net.IPAddress.Any, port);

これでOKです!

スポンサードリンク

関連記事リスト

  • TcpListenerでTCP受信
  • TcpClientでTCP送信

テーマ : プログラミング
ジャンル : コンピュータ

ハンドルされていない例外: 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();
        }

    }
}