/// <summary> /// 非同期受信コールバック /// </summary> /// <param name="ar"></param> private void ReciveAsyncCallback(IAsyncResult ar) { // オブジェクト変換 TelnetClientReciveStream stream = (TelnetClientReciveStream)ar.AsyncState; // 非同期読込が終了 int bytesRead = stream.Socket.EndReceive(ar); // ロギング this.Logger.InfoFormat("受信(非同期)データ - {0:#,0} byte:\n{1}", bytesRead, Common.Diagnostics.Debug.Dump(1, stream.Buffer, bytesRead)); // 受信通知 this.OnReciveNotify.Set(); // イベント呼出 if (this.OnRecive != null) { // イベントパラメータ生成 TelnetClientReciveEventArgs eventArgs = new TelnetClientReciveEventArgs() { Socket = stream.Socket, Size = bytesRead, Stream = stream.Stream, }; // イベント呼出し this.OnRecive(this, eventArgs); } // 受信通知リセット this.OnReciveNotify.Reset(); }
/// <summary> /// 非同期受信 /// </summary> /// <param name="size"></param> public void ReciveAsync(int size) { // 接続中か? if (!this.m_Socket.Connected) { // 例外 throw new TelnetClientException("接続状態(Telnet)ではありません"); } // 受信用Stream生成 TelnetClientReciveStream stream = new TelnetClientReciveStream(); stream.Buffer = new byte[size]; stream.Socket = this.m_Socket; stream.Stream = new MemoryStream(size); // 非同期受信 IAsyncResult result = this.m_Socket.BeginReceive(stream.Buffer, 0, stream.Buffer.Length, SocketFlags.None, this.ReciveAsyncCallback, stream); }