示例#1
0
        /// <summary>
        /// 构造方法
        /// </summary>
        /// <param name="socketServerParameter"></param>
        public SocketServer(SocketServerParameter socketServerParameter)
        {
            this.socketServerParameter = socketServerParameter;

            /*
             * 1、初始化数据缓冲区
             * 2、初始化接收请求对象池
             * 3、初始化接收发送数据对象池
             * 4、初始化最大连接数量控制单元
             * 5、初始化接收请求Socket对象
             */
            //1.
            this.bufferManager = new BufferManager(socketServerParameter);
            //2.
            this.acceptPool = new SocketAsyncEventArgsPool(socketServerParameter.AccptPoolSize);
            for (int i = 0; i < socketServerParameter.AccptPoolSize; i++)
            {
                this.acceptPool.Push(CreateAcceptSocketAsyncEventArgs());
            }
            //3.
            this.receiveSendPool = new SocketAsyncEventArgsPool(socketServerParameter.MaxConnectionCount);
            for (int i = 0; i < socketServerParameter.MaxConnectionCount; i++)
            {
                this.receiveSendPool.Push(CreateReceiveSendSocketAsyncEventArgs());
            }
            //4.
            this.semaphore = new Semaphore(socketServerParameter.MaxConnectionCount, socketServerParameter.MaxConnectionCount);
            //5.
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Bind(socketServerParameter.EndPoint);
            socket.Listen(socketServerParameter.Backlog);
        }
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="socketServerParameter"></param>
 public BufferManager(SocketServerParameter socketServerParameter)
 {
     this.maxConnectionCount  = socketServerParameter.MaxConnectionCount;
     this.singletonBufferSize = socketServerParameter.SingletonBufferSize;
     this.buffer       = new byte[maxConnectionCount * singletonBufferSize];
     this.bufferOffset = 0;
 }
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="socketServerParameter"></param>
 public DataHolder(SocketServerParameter socketServerParameter)
 {
     this.receiveMessageLength = socketServerParameter.ReceiveMessageLength;
     this.sendMessageLength    = socketServerParameter.SendMessageLength;
     this.singleBufferSize     = socketServerParameter.SingletonBufferSize;
     this.receiveBuffer        = new byte[receiveMessageLength];
     this.sendBuffer           = new byte[sendMessageLength];
     this.Reset();
 }