/// <summary> /// 触发网络错误事件 /// </summary> /// <param name="state"></param> private void RaiseNetError(AsyncSocketUDPState state) { if (NetError != null) { NetError(this, new AsyncSocketUDPEventArgs(state)); } }
/// <summary> /// 触发异常事件 /// </summary> /// <param name="state"></param> private void RaiseOtherException(AsyncSocketUDPState state, string descrip) { if (OtherException != null) { OtherException(this, new AsyncSocketUDPEventArgs(descrip, state)); } }
/// <summary> /// 触发数据发送完毕的事件 /// </summary> /// <param name="state"></param> private void RaiseCompletedSend(AsyncSocketUDPState state) { if (CompletedSend != null) { CompletedSend(this, new AsyncSocketUDPEventArgs(state)); } }
/// <summary> /// 触发发送数据前的事件 /// </summary> /// <param name="state"></param> private void RaisePrepareSend(AsyncSocketUDPState state) { if (PrepareSend != null) { PrepareSend(this, new AsyncSocketUDPEventArgs(state)); } }
private void RaiseDataReceived(AsyncSocketUDPState state) { if (DataReceived != null) { DataReceived(this, new AsyncSocketUDPEventArgs(state)); } }
/// <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); } } }
/// <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);*/ } }
/// <summary> /// 关闭一个与客户端之间的会话 /// </summary> /// <param name="state">需要关闭的客户端会话对象</param> public void Close(AsyncSocketUDPState state) { if (state != null) { //_clients.Remove(state); //_clientCount--; //TODO 触发关闭事件 } }
public AsyncSocketUDPEventArgs(string msg, AsyncSocketUDPState state) { this._msg = msg; this._state = state; IsHandled = false; }
public AsyncSocketUDPEventArgs(AsyncSocketUDPState state) { this._state = state; IsHandled = false; }
private void RaiseOtherException(AsyncSocketUDPState state) { RaiseOtherException(state, ""); }