C# Socket通信改进记录

本文深入探讨了使用原始Socket、异步Socket和SocketAsyncEventArgs进行消息发送和接收的方法,同时介绍了Socket与WebSocket的相互通信实现。还讨论了Java中Socket的支持,异常捕获及废弃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处理

 

转载于:https://www.cnblogs.com/shikyoh/p/4588403.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值