C# Socket通信改进记录

1. Socket

  1. 使用原始Socket,Send和Recv方法 进行发送和消息获取。(另起后台线程 不停获取和发送)
    1.   
       public void RecvMsg()
      
              {
      
                  //receive message
      
                  bool isListen = true;
      
      
      
                  while (isListen)
      
                  {
      
                      string recStr = "";
      
                      byte[] recBytes = new byte[4096];
      
                      int bytes = clientSocket.Receive(recBytes, recBytes.Length, 0);
      
                      recStr += Encoding.UTF8.GetString(recBytes, 0, bytes);
      
      
      
                      if (!String.IsNullOrWhiteSpace(recStr))
      
                      {
      
                          if (recStr.EndsWith(Environment.NewLine))
      
                          {
      
                              recStr = recStr.Substring(0, recStr.Length - Environment.NewLine.Length);
      
                          }
      
                          AppendContet(recStr);
      
                      }
      
                  }
      
      
      
              }

       

  2. 使用Socket BeginSend 和BeginReceive 进行异步发送和消息获取。
    1.   
      private void button1_Click(object sender, EventArgs e)
      
              {
      
                  //send message
      
                  string sendStr = txtMsg.Text;
      
                  byte[] sendBytes = Encoding.UTF8.GetBytes(sendStr);
      
                  clientSocket.BeginSend(sendBytes, 0, sendBytes.Length, SocketFlags.None, new AsyncCallback(Send_Complete), clientSocket);
      
              }
      
      
      
      
      
              private void Send_Complete(IAsyncResult e)
      
              {
      
                  if (e.IsCompleted)
      
                  {
      
                      AppendDebugMsg("异步发送已完成");
      
                  }
      
                  else
      
                  {
      
                      AppendDebugMsg("异步发送失败");
      
                  }
      
                  var socket = e.AsyncState as Socket;
      
                  if (socket == null)
      
                  {
      
                      AppendDebugMsg("发送异步Socket为空");
      
                  }
      
              }

       

  3. 使用 SocketAsyncEventArgs 进行高效率 异步发送和消息获取。
    1.   
       public void SendAync(byte[] sendBytes)
      
              {
      
                  SocketAsyncEventArgs sendSocketArgs = GlobalConfig.SendPool.Pop();
      
                  sendSocketArgs.UserToken = this;
      
                  sendSocketArgs.SetBuffer(sendBytes, 0, sendBytes.Length);
      
      
      
                  this.ClientSocket.SendAsync(sendSocketArgs);
      
              }

       

2. Socket 与 WebSocket进行相互通信

  1. 前端Html5  WebSocket搭建
  2. Socket 接收和发送方法改进 支持 WebSocket。

 

其他:

  1. java对于 Socket的支持 ,及 ReadLine 造成的IO阻塞。
  2. 异常捕获,及废弃Socket处理

 

你可能感兴趣的:(socket通信)