zoukankan      html  css  js  c++  java
  • 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处理
  • 相关阅读:
    概率图模型 ——(6)团树传播算法
    概率图模型 ——(5)变量消元法求边缘概率
    Catkin workspace `/home/qian` is already initialized. No action taken.
    安装TensorRT
    vscode教程
    概率图模型 ——(4)因子图
    概率图模型 ——(3)马尔科夫随机场
    概率图模型 ——(2)贝叶斯网络
    概率图模型 ——(1)概率论与图论基础
    Kubernetes 是怎么实现服务发现的?
  • 原文地址:https://www.cnblogs.com/shikyoh/p/4588403.html
Copyright © 2011-2022 走看看