コード例 #1
0
 /// <summary>
 /// 触发网络错误事件
 /// </summary>
 /// <param name="state"></param>
 private void RaiseNetError(AsyncSocketUDPState state)
 {
     if (NetError != null)
     {
         NetError(this, new AsyncSocketUDPEventArgs(state));
     }
 }
コード例 #2
0
 /// <summary>
 /// 触发异常事件
 /// </summary>
 /// <param name="state"></param>
 private void RaiseOtherException(AsyncSocketUDPState state, string descrip)
 {
     if (OtherException != null)
     {
         OtherException(this, new AsyncSocketUDPEventArgs(descrip, state));
     }
 }
コード例 #3
0
 /// <summary>
 /// 触发数据发送完毕的事件
 /// </summary>
 /// <param name="state"></param>
 private void RaiseCompletedSend(AsyncSocketUDPState state)
 {
     if (CompletedSend != null)
     {
         CompletedSend(this, new AsyncSocketUDPEventArgs(state));
     }
 }
コード例 #4
0
 /// <summary>
 /// 触发发送数据前的事件
 /// </summary>
 /// <param name="state"></param>
 private void RaisePrepareSend(AsyncSocketUDPState state)
 {
     if (PrepareSend != null)
     {
         PrepareSend(this, new AsyncSocketUDPEventArgs(state));
     }
 }
コード例 #5
0
 private void RaiseDataReceived(AsyncSocketUDPState state)
 {
     if (DataReceived != null)
     {
         DataReceived(this, new AsyncSocketUDPEventArgs(state));
     }
 }
コード例 #6
0
        /// <summary>
        /// 接收数据的方法
        /// </summary>
        /// <param name="ar"></param>
        private void ReceiveDataAsync(IAsyncResult ar)
        {
            AsyncSocketUDPState so = ar.AsyncState as AsyncSocketUDPState;
            //EndPoint sender = new IPEndPoint(IPAddress.Any, 0);
            int len = -1;

            try
            {
                len = _serverSock.EndReceiveFrom(ar, ref so.remote);

                //len = _serverSock.EndReceiveFrom(ar, ref sender);

                //EndReceiveFrom 和 EndReceive区别
                //len = _serverSock.EndReceive(ar);
                //TODO 处理数据

                //触发数据收到事件
                RaiseDataReceived(so);
            }
            catch (Exception)
            {
                //TODO 处理异常
                RaiseOtherException(so);
            }
            finally
            {
                if (IsRunning && _serverSock != null)
                {
                    _serverSock.BeginReceiveFrom(so.buffer, 0, so.buffer.Length, SocketFlags.None,
                                                 ref so.remote, new AsyncCallback(ReceiveDataAsync), so);
                }
            }
        }
コード例 #7
0
        /// <summary>
        /// 启动服务器
        /// </summary>
        /// <returns>异步TCP服务器</returns>
        public void Start()
        {
            if (!IsRunning)
            {
                IsRunning = true;
                _serverSock.Bind(new IPEndPoint(this.Address, this.Port));
                //_serverSock.Connect(new IPEndPoint(IPAddress.Any, 0));

                AsyncSocketUDPState so = new AsyncSocketUDPState();
                so.workSocket = _serverSock;

                _serverSock.BeginReceiveFrom(so.buffer, 0, so.buffer.Length, SocketFlags.None,
                                             ref so.remote, new AsyncCallback(ReceiveDataAsync), null);


                //EndPoint sender = new IPEndPoint(IPAddress.Any, 0);

                //_serverSock.BeginReceiveFrom(_recvBuffer, 0, _recvBuffer.Length, SocketFlags.None,
                //    ref sender, new AsyncCallback(ReceiveDataAsync), sender);

                //BeginReceive 和 BeginReceiveFrom的区别是什么

                /*_serverSock.BeginReceive(_recvBuffer, 0, _recvBuffer.Length, SocketFlags.None,
                 *  new AsyncCallback(ReceiveDataAsync), null);*/
            }
        }
コード例 #8
0
 /// <summary>
 /// 关闭一个与客户端之间的会话
 /// </summary>
 /// <param name="state">需要关闭的客户端会话对象</param>
 public void Close(AsyncSocketUDPState state)
 {
     if (state != null)
     {
         //_clients.Remove(state);
         //_clientCount--;
         //TODO 触发关闭事件
     }
 }
コード例 #9
0
 public AsyncSocketUDPEventArgs(string msg, AsyncSocketUDPState state)
 {
     this._msg   = msg;
     this._state = state;
     IsHandled   = false;
 }
コード例 #10
0
 public AsyncSocketUDPEventArgs(AsyncSocketUDPState state)
 {
     this._state = state;
     IsHandled   = false;
 }
コード例 #11
0
 private void RaiseOtherException(AsyncSocketUDPState state)
 {
     RaiseOtherException(state, "");
 }