예제 #1
0
 /// <summary>
 /// コンストラクタ,サーバーへ接続します.
 /// </summary>
 /// <param name="host">
 /// 接続を待っているサーバーのIPアドレスおよびホスト名を指定します.
 /// IPアドレスにはIPv4およびIPv6を用いることができます.
 /// </param>
 /// <param name="port">
 /// 接続を待っているサーバーのポート番号(0 から 65535)を指定します.
 /// </param>
 /// <param name="connectFunc">
 /// サーバーへの接続が成功し,送受信の準備が整った場合に呼び出すコールバック関数のデリゲートを指定します.
 /// これ以降,Sendを呼び出すことができます.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="recvFunc">
 /// 接続したサーバーからの受信があった場合に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="discFunc">
 /// サーバーとの通信が切断された場合に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="dataLength">
 /// 送受信する際に用いるデータ長(byte型配列の要素数)を指定します.
 /// Sendで送信できる最大データ長になりますが,Sendに与えた配列の大きさによらず,
 /// このデータ長のデータをクライアントに送ります.このためdataLengthが大きすぎると1回1回の通信に時間がかかります.
 /// TCP_async.Serverに指定する値と同じにする必要があります.
 /// </param>
 public Client(string host, int port, ConnectFunc connectFunc, AsyncRecvBytesFunc recvFunc, DisconnectFunc discFunc, int dataLength)
 {
     System.Net.Sockets.Socket soc = ConnectSocket(host, port);
     ch = new Channel(0, recvFunc, soc, discFunc, dataLength);
     if (connectFunc != null)
     {
         connectFunc(0, ((System.Net.IPEndPoint)soc.RemoteEndPoint).Address.ToString());
     }
 }
예제 #2
0
        /// <summary>
        /// コンストラクタ,クライアントからの接続を開始します.
        /// </summary>
        /// <param name="port">
        /// クライアントからの接続を待つポート番号(0 から 65535)を指定します.
        /// Well known port numbersは使うべきではありません.
        /// </param>
        /// <param name="accptdFunc">
        /// クライアントからの接続を受け入れた時に呼び出すコールバック関数のデリゲートを指定します.
        /// コールバックが不要な場合はnullを指定します.
        /// </param>
        /// <param name="recvFunc">
        /// 接続したクライントからの受信があった場合に呼び出すコールバック関数のデリゲートを指定します.
        /// コールバックが不要な場合はnullを指定します.
        /// </param>
        /// <param name="discFunc">
        /// 接続したクライントが切断された場合に呼び出すコールバック関数のデリゲートを指定します.
        /// コールバックが不要な場合はnullを指定します.
        /// </param>
        /// <param name="dataLength">
        /// 送受信する際に用いるデータ長(byte型配列の要素数)を指定します.
        /// Sendで送信できる最大データ長になりますが,Sendに与えた配列の大きさによらず,
        /// このデータ長のデータをクライアントに送ります.このためdataLengthが大きすぎると1回1回の通信に時間がかかります.
        /// TCP_async.Clientに指定する値と同じにする必要があります.
        /// </param>
        public Server(int port, ConnectFunc accptdFunc, AsyncRecvBytesFunc recvFunc, DisconnectFunc discFunc, int dataLength)
        {
            nextRemoteID            = 0;
            this.FuncWhenRecv       = recvFunc;
            this.FuncWhenAccptd     = accptdFunc;
            this.FuncWhenDisconnect = discFunc;
            this.chList             = new List <Channel>();
            this.bufferSize         = dataLength;

            System.Net.IPEndPoint endPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Any, port);
            Console.WriteLine("server:Local address and port: {0}", endPoint.ToString());
            this.listenerSoc = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,
                                                             System.Net.Sockets.SocketType.Stream,
                                                             System.Net.Sockets.ProtocolType.Tcp);
            this.listenerSoc.Bind(endPoint);
            this.listenerSoc.Listen(1000);

            StartAccept();
        }
예제 #3
0
 /// <summary>
 /// コンストラクタ,サーバーへ接続します.
 /// </summary>
 /// <param name="host">
 /// 接続を待っているサーバーのIPアドレスおよびホスト名を指定します.
 /// IPアドレスにはIPv4およびIPv6を用いることができます.
 /// </param>
 /// <param name="port">
 /// 接続を待っているサーバーのポート番号(0 から 65535)を指定します.
 /// </param>
 /// <param name="connectFunc">
 /// サーバーへの接続が成功し,送受信の準備が整った場合に呼び出すコールバック関数のデリゲートを指定します.
 /// これ以降,Sendを呼び出すことができます.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="recvFunc">
 /// 接続したサーバーからの受信があった場合に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="discFunc">
 /// サーバーとの通信が切断された場合に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <remarks>最大データ長は1024が使用されます.</remarks>
 public Client(string host, int port, ConnectFunc connectFunc, AsyncRecvBytesFunc recvFunc, DisconnectFunc discFunc)
     : this(host, port, connectFunc, recvFunc, discFunc, 1024)
 {
 }
예제 #4
0
        /// <summary>
        /// コンストラクタ,クライアントからの接続を開始します.
        /// </summary>
        /// <param name="port">
        /// クライアントからの接続を待つポート番号(0 から 65535)を指定します.
        /// Well known port numbersは使うべきではありません.
        /// </param>
        /// <param name="accptdFunc">
        /// クライアントからの接続を受け入れた時に呼び出すコールバック関数のデリゲートを指定します.
        /// コールバックが不要な場合はnullを指定します.
        /// </param>
        /// <param name="recvFunc">
        /// 接続したクライントからの受信があった場合に呼び出すコールバック関数のデリゲートを指定します.
        /// コールバックが不要な場合はnullを指定します.
        /// </param>
        /// <param name="discFunc">
        /// 接続したクライントが切断された場合に呼び出すコールバック関数のデリゲートを指定します.
        /// コールバックが不要な場合はnullを指定します.
        /// </param>
        /// <param name="dataLength">
        /// 送受信する際に用いるデータ長(byte型配列の要素数)を指定します.
        /// Sendで送信できる最大データ長になりますが,Sendに与えた配列の大きさによらず,
        /// このデータ長のデータをクライアントに送ります.このためdataLengthが大きすぎると1回1回の通信に時間がかかります.
        /// TCP_async.Clientに指定する値と同じにする必要があります.
        /// </param>
        public Server(int port, ConnectFunc accptdFunc, AsyncRecvBytesFunc recvFunc, DisconnectFunc discFunc, int dataLength)
        {
            nextRemoteID = 0;
            this.FuncWhenRecv = recvFunc;
            this.FuncWhenAccptd = accptdFunc;
            this.FuncWhenDisconnect = discFunc;
            this.chList = new List<Channel>();
            this.bufferSize = dataLength;

            System.Net.IPEndPoint endPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Any, port);
            Console.WriteLine("server:Local address and port: {0}", endPoint.ToString());
            this.listenerSoc = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,
                System.Net.Sockets.SocketType.Stream,
                System.Net.Sockets.ProtocolType.Tcp);
            this.listenerSoc.Bind(endPoint);
            this.listenerSoc.Listen(1000);

            StartAccept();
        }
예제 #5
0
 /// <summary>
 /// コンストラクタ,クライアントからの接続を開始します.
 /// </summary>
 /// <param name="port">
 /// クライアントからの接続を待つポート番号(0 から 65535)を指定します.
 /// Well known port numbersは使うべきではありません.
 /// </param>
 /// <param name="accptdFunc">
 /// クライアントからの接続を受け入れた時に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="recvFunc">
 /// 接続したクライントからの受信があった場合に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="discFunc">
 /// 接続したクライントが切断された場合に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <remarks>
 /// 最大データ長は1024が用いられます.</remarks>
 public Server(int port, ConnectFunc accptdFunc, AsyncRecvBytesFunc recvFunc, DisconnectFunc discFunc)
     : this(port, accptdFunc, recvFunc, discFunc, 1024)
 {
 }
예제 #6
0
 /// <summary>
 /// コンストラクタ,サーバーへ接続します.
 /// </summary>
 /// <param name="host">
 /// 接続を待っているサーバーのIPアドレスおよびホスト名を指定します.
 /// IPアドレスにはIPv4およびIPv6を用いることができます.
 /// </param>
 /// <param name="port">
 /// 接続を待っているサーバーのポート番号(0 から 65535)を指定します.
 /// </param>
 /// <param name="connectFunc">
 /// サーバーへの接続が成功し,送受信の準備が整った場合に呼び出すコールバック関数のデリゲートを指定します.
 /// これ以降,Sendを呼び出すことができます.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="recvFunc">
 /// 接続したサーバーからの受信があった場合に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="discFunc">
 /// サーバーとの通信が切断された場合に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="dataLength">
 /// 送受信する際に用いるデータ長(byte型配列の要素数)を指定します.
 /// Sendで送信できる最大データ長になりますが,Sendに与えた配列の大きさによらず,
 /// このデータ長のデータをクライアントに送ります.このためdataLengthが大きすぎると1回1回の通信に時間がかかります.
 /// TCP_async.Serverに指定する値と同じにする必要があります.
 /// </param>    
 public Client(string host, int port, ConnectFunc connectFunc, AsyncRecvBytesFunc recvFunc, DisconnectFunc discFunc, int dataLength)
 {
     System.Net.Sockets.Socket soc = ConnectSocket(host, port);
     ch = new Channel(0, recvFunc, soc, discFunc, dataLength);
     if (connectFunc != null)
         connectFunc(0, ((System.Net.IPEndPoint)soc.RemoteEndPoint).Address.ToString());
 }
예제 #7
0
 /// <summary>
 /// コンストラクタ,サーバーへ接続します.
 /// </summary>
 /// <param name="host">
 /// 接続を待っているサーバーのIPアドレスおよびホスト名を指定します.
 /// IPアドレスにはIPv4およびIPv6を用いることができます.
 /// </param>
 /// <param name="port">
 /// 接続を待っているサーバーのポート番号(0 から 65535)を指定します.
 /// </param>
 /// <param name="connectFunc">
 /// サーバーへの接続が成功し,送受信の準備が整った場合に呼び出すコールバック関数のデリゲートを指定します.
 /// これ以降,Sendを呼び出すことができます.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="recvFunc">
 /// 接続したサーバーからの受信があった場合に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="discFunc">
 /// サーバーとの通信が切断された場合に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <remarks>最大データ長は1024が使用されます.</remarks>
 public Client(string host, int port, ConnectFunc connectFunc, AsyncRecvBytesFunc recvFunc, DisconnectFunc discFunc)
     : this(host, port, connectFunc, recvFunc, discFunc, 1024)
 {
 }
예제 #8
0
 /// <summary>
 /// コンストラクタ,クライアントからの接続を開始します.
 /// </summary>
 /// <param name="port">
 /// クライアントからの接続を待つポート番号(0 から 65535)を指定します.
 /// Well known port numbersは使うべきではありません.
 /// </param>
 /// <param name="accptdFunc">
 /// クライアントからの接続を受け入れた時に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="recvFunc">
 /// 接続したクライントからの受信があった場合に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <param name="discFunc">
 /// 接続したクライントが切断された場合に呼び出すコールバック関数のデリゲートを指定します.
 /// コールバックが不要な場合はnullを指定します.
 /// </param>
 /// <remarks>
 /// 最大データ長は1024が用いられます.</remarks>
 public Server(int port, ConnectFunc accptdFunc, AsyncRecvBytesFunc recvFunc, DisconnectFunc discFunc)
     : this(port, accptdFunc, recvFunc, discFunc, 1024)
 {
 }