Esempio n. 1
0
        void OnAcceptCallBack(IAsyncResult ar)
        {
            Packet    packet       = ar.AsyncState as Packet;
            NetSocket newSocketCtx = packet.socketCtx;

            //接收结果
            newSocketCtx.sock = listenSocket.sock.EndAccept(ar);

            newSocketCtx.SetSocketState(SocketState.CONNECTED_CLIENT);
            newSocketCtx.UpdataTimeStamp();

            Packet newPacket = newSocketCtx.CreatePacket(dePacketor.GetMaxBufferSize());

            serverTaskMgr.PostServerMessage(ServerMessage.SMSG_ACCEPT_CLIENT, newPacket);


            //继续接受客户端的请求
            serverTaskMgr.PostSingleIocpAccpetTask(packet);
        }
Esempio n. 2
0
        bool CreateListener()
        {
            Server    server    = GetServer();
            NetSocket listenCtx = null;

            // 生成用于监听的Socket的信息
            if (listenCtx == null)
            {
                Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                listenCtx      = new NetSocket(this);
                listenCtx.sock = sock;
            }

            listenCtx.SetSocketType(NetSocketType.LISTENER_SOCKET);

            if (null == listenCtx.sock)
            {
                listenCtx.SetSocketState(SocketState.INIT_FAILD);
                SocketError(listenCtx);
                //LOG4CPLUS_ERROR(log.GetInst(), "初始化Socket失败,错误代码:"<<_GetLastError());
                return(false);
            }

            SetListenerContext(listenCtx);
            socketMap[listenCtx.GetID()] = listenCtx;

            //实例一个网络端点  传入地址和端口
            IPEndPoint serverEP = new IPEndPoint(IPAddress.Any, 23456);

            //绑定网络端点
            listenCtx.sock.Bind(serverEP);
            //设置最大监听数量
            listenCtx.sock.Listen(0x7fffffff);

            listenCtx.SetSocketState(SocketState.LISTENING);

            serverTaskMgr.PostServerMessage(ServerMessage.SMSG_LISTENER_CREATE_FINISH, null);

            return(true);
        }