Пример #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, "");
 }