예제 #1
0
            public void startStop(String title, ProtocolKind protocolKind)
            {
                var bindIp = new Ip(IpKind.V4Localhost);
                const int port = 8881;
                const int listenMax = 10;
                Ssl ssl= null;

                var sockServer = new SockServer(new Kernel(),protocolKind,ssl);

                Assert.That(sockServer.SockState, Is.EqualTo(SockState.Idle));

                ThreadStart action = () =>  {
                    if (protocolKind == ProtocolKind.Tcp){
                        sockServer.Bind(bindIp, port, listenMax);
                    } else{
                        sockServer.Bind(bindIp, port);
                    }
                };

                var _t = new Thread(action) { IsBackground = true };
                _t.Start();

                while (sockServer.SockState == SockState.Idle){
                    Thread.Sleep(100);
                }
                Assert.That(sockServer.SockState, Is.EqualTo(SockState.Bind));
                sockServer.Close(); //bind()にThreadBaseのポインタを送っていないため、isLifeでブレイクできないので、selectで例外を発生させて終了する
                Assert.That(sockServer.SockState, Is.EqualTo(SockState.Error));
            }
예제 #2
0
 public EchoServer(String addr, int port)
     : base(null)
 {
     _sockServer = new SockServer(new Kernel(),ProtocolKind.Udp,_ssl);
     _addr = addr;
     _port = port;
 }
예제 #3
0
            public void getLocalAddress(String title, ProtocolKind protocolKind)
            {
                var bindIp = new Ip(IpKind.V4Localhost);
                const int port = 9991;
                const int listenMax = 10;
                Ssl ssl = null;

                var sockServer = new SockServer(new Kernel(),protocolKind,ssl);

                ThreadStart action = () =>{
                    if (protocolKind == ProtocolKind.Tcp){
                        sockServer.Bind(bindIp, port, listenMax);
                    }else{
                        sockServer.Bind(bindIp, port);
                    }};

                var _t = new Thread(action) { IsBackground = true };
                _t.Start();

                while (sockServer.SockState == SockState.Idle){
                    Thread.Sleep(200);
                }

                var localAddress = sockServer.LocalAddress;
                Assert.That(localAddress.ToString(), Is.EqualTo("127.0.0.1:9991"));
                //bind()後 localAddressの取得が可能になる

                var remoteAddress = sockServer.RemoteAddress;
                Assert.IsNull(remoteAddress);
                //SockServerでは、remoteAddressは常にnullになる

                sockServer.Close();
            }
예제 #4
0
        //指定したアドレス・ポートで待ち受けて、接続されたら、そのソケットを返す
        //失敗した時nullが返る
        //Ver5.9.2 Java fix
        //public static SockTcp CreateConnection(Kernel kernel,Ip ip, int port,ILife iLife){
        public static SockTcp CreateConnection(Kernel kernel, Ip ip, int port, Ssl ssl, ILife iLife)
        {
            //Ver5.9.2 Java fix
            //var sockServer = new SockServer(kernel,ProtocolKind.Tcp);
            var sockServer = new SockServer(kernel, ProtocolKind.Tcp, ssl);

            if (sockServer.SockState != SockState.Error)
            {
                const int listenMax = 1;
                if (sockServer.Bind(ip, port, listenMax))
                {
                    while (iLife.IsLife())
                    {
                        var child = (SockTcp)sockServer.Select(iLife);
                        if (child == null)
                        {
                            break;
                        }
                        sockServer.Close(); //これ大丈夫?
                        return(child);
                    }
                }
            }
            sockServer.Close();
            return(null);
        }
예제 #5
0
 //bindが可能かどうかの確認
 public static bool IsAvailable(Kernel kernel,Ip ip, int port)
 {
     var sockServer = new SockServer(kernel,ProtocolKind.Tcp, null);
     if (sockServer.SockState != SockState.Error){
         const int listenMax = 1;
         if (sockServer.Bind(ip, port, listenMax)){
             sockServer.Close();
             return true;
         }
     }
     sockServer.Close();
     return false;
 }
예제 #6
0
        //bindが可能かどうかの確認
        public static bool IsAvailable(Kernel kernel, Ip ip, int port)
        {
            var sockServer = new SockServer(kernel, ProtocolKind.Tcp, null);

            if (sockServer.SockState != SockState.Error)
            {
                const int listenMax = 1;
                if (sockServer.Bind(ip, port, listenMax))
                {
                    sockServer.Close();
                    return(true);
                }
            }
            sockServer.Close();
            return(false);
        }
예제 #7
0
 //指定したアドレス・ポートで待ち受けて、接続されたら、そのソケットを返す
 //失敗した時nullが返る
 //Ver5.9.2 Java fix
 //public static SockTcp CreateConnection(Kernel kernel,Ip ip, int port,ILife iLife){
 public static SockTcp CreateConnection(Kernel kernel,Ip ip, int port, Ssl ssl,ILife iLife)
 {
     //Ver5.9.2 Java fix
     //var sockServer = new SockServer(kernel,ProtocolKind.Tcp);
     var sockServer = new SockServer(kernel, ProtocolKind.Tcp,ssl);
     if (sockServer.SockState != SockState.Error) {
         const int listenMax = 1;
         if (sockServer.Bind(ip, port, listenMax)){
             while (iLife.IsLife()){
                 var child = (SockTcp) sockServer.Select(iLife);
                 if (child == null){
                     break;
                 }
                 sockServer.Close(); //これ大丈夫?
                 return child;
             }
         }
     }
     sockServer.Close();
     return null;
 }
예제 #8
0
파일: OneServer.cs 프로젝트: jsakamoto/bjd5
        protected override void OnRunThread()
        {
            var port = (int) Conf.Get("port");
            var bindStr = string.Format("{0}:{1} {2}", _oneBind.Addr, port, _oneBind.Protocol);

            Logger.Set(LogKind.Normal, null, 9000000, bindStr);

            //DOS��󂯂��ꍇ�Amultiple���܂ŘA���A�N�Z�X�܂ł͋L�����Ă��܂�
            //DOS���I��������A���̕��������A�Ɏ��Ԃ�v����

            //Ver5.9,2 Java fix
            //_sockServer = new SockServer(this.Kernel,_oneBind.Protocol);
            _sockServer = new SockServer(Kernel, _oneBind.Protocol,ssl);

            //Ver5.9.2 Java fix
            if (ssl != null && !ssl.Status){
                Logger.Set(LogKind.Error, null, 9000024, bindStr);
                //[C#]
                ThreadBaseKind = ThreadBaseKind.Running;
            } else{
                if (_sockServer.SockState != sock.SockState.Error) {
                    if (_sockServer.ProtocolKind == ProtocolKind.Tcp) {
                        RunTcpServer(port);
                    } else {
                        RunUdpServer(port);
                    }
                }
            }

            //Java fix
            _sockServer.Close();
            Logger.Set(LogKind.Normal, null, 9000001, bindStr);
        }
예제 #9
0
파일: OneServer.cs 프로젝트: jsakamoto/bjd5
        public new void Stop()
        {
            if (_sockServer == null){
                return; //���łɏI���������I����Ă���
            }
            base.Stop(); //life=false �ł��ׂẴ��[�v��������
            _sockServer.Close();

            // �S���̎q�X���b�h���I������̂�҂�
            while (Count() > 0){
                Thread.Sleep(500);
            }
            _sockServer = null;
        }