示例#1
0
        public void close()
        {
            DisconnectFunc disconnect_cb = null;

            lock (close_mutex)
            {
                if (!closed)
                {
                    closed = true;
                    if (poll_set != null)
                    {
                        poll_set.delSocket(sock);
                    }
                    if (sock.Connected)
                    {
                        sock.Shutdown(SocketShutdown.Both);
                    }
                    sock.Close();
                    sock               = null;
                    disconnect_cb      = this.disconnect_cb;
                    this.disconnect_cb = null;
                    read_cb            = null;
                    write_cb           = null;
                    accept_cb          = null;
                }
            }
            if (disconnect_cb != null)
            {
                disconnect_cb(this);
            }
        }
示例#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
 public Channel(int rID, AsyncRecvBytesFunc recvFunc, System.Net.Sockets.Socket workingSoc, DisconnectFunc cFunc, int dataLength )
 {
     this.remoteID = rID;
     this.FuncWhenRecvd = recvFunc;
     this.FuncWhenClosed = cFunc;
     this.socket = workingSoc;
     this.bufferSize = dataLength;
     AsyncStateObject.bufferSizeStatic = dataLength;
     StartReceive(this.socket);
 }
示例#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>
        /// <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();
        }
示例#6
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)
 {
 }
示例#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>
 /// <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());
 }
示例#8
0
 public Channel(int rID, AsyncRecvBytesFunc recvFunc, System.Net.Sockets.Socket workingSoc, DisconnectFunc cFunc, int dataLength)
 {
     this.remoteID       = rID;
     this.FuncWhenRecvd  = recvFunc;
     this.FuncWhenClosed = cFunc;
     this.socket         = workingSoc;
     this.bufferSize     = dataLength;
     AsyncStateObject.bufferSizeStatic = dataLength;
     StartReceive(this.socket);
 }
示例#9
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());
     }
 }
示例#10
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)
 {
 }
示例#11
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)
 {
 }