Esempio n. 1
0
 /// <summary>
 /// 异步发送操作完成时调用此方法
 /// 该方法在套接字上发出另一个接收以读取任何附加信息
 /// 从客户端发送的数据
 /// </summary>
 /// <param name="e"></param>
 private void ProcessSend(SocketAsyncEventArgs e)
 {
     if (e.SocketError == SocketError.Success)
     {
         AsyncUserToken token = e.UserToken as AsyncUserToken;// 获取客户端信息
         try
         {
             // 读取从客户端发送的下一个数据块
             bool willRaiseEvent = token.Socket.ReceiveAsync(e);
             if (!willRaiseEvent)
             {
                 ProcessReceive(e);// 如果数据不为空就发送给客户端
             }
         }
         catch (Exception ex)
         {
             log.AddLog(LogType.Error, $"在异步发送完成时出错!\r\n客户端地址:{token.IPAddress}\r\n错误信息:{ex.Message}");
         }
     }
     else
     {
         CloseClientSocket(e);
     }
 }
Esempio n. 2
0
        /// <summary>
        /// 发送数据到指定对象
        /// </summary>
        /// <param name="token">用户Token信息,以此来辨识用户</param>
        /// <param name="message">要发送的信息</param>
        internal void SendMessage(AsyncUserToken token, Byte[] message)
        {
            if (token == null || token.Socket == null || !token.Socket.Connected)
            {
                return;
            }
            try
            {
                Byte[] buff = new Byte[message.Length + 4]; // 简单协议发送
                Byte[] len  = BitConverter.GetBytes(message.Length);
                Array.Copy(len, buff, 4);
                Array.Copy(message, 0, buff, 4, message.Length);

                SocketAsyncEventArgs sendArgs = new SocketAsyncEventArgs {
                    UserToken = token
                };
                sendArgs.SetBuffer(message, 0, message.Length); // 数据放入缓冲池
                token.Socket.SendAsync(sendArgs);               // 发送数据
            }
            catch (Exception ex)
            {
                log.AddLog(LogType.Error, $"发送数据到指定对象时出错!\r\n客户端地址:{token.IPAddress}\r\n错误信息:{ex.Message}");
            }
        }