博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Socket通信改进记录
阅读量:5962 次
发布时间:2019-06-19

本文共 2104 字,大约阅读时间需要 7 分钟。

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

你可能感兴趣的文章
iOS深拷贝与浅拷贝
查看>>
mysql5.6参数说明
查看>>
[转]线程安全的单例模式
查看>>
winfrom的打开窗口特效
查看>>
IOS(swift)-数据存储 · NSKeyedArchiver 归档
查看>>
TypeScript 入门指南
查看>>
mysql报错 Data truncated for column 'from' at row 1
查看>>
Monkey test确定package name的一种特殊方法
查看>>
ubuntu 12.04.4 安装 devstack
查看>>
windows10:一些虚拟化功能与vmware冲突
查看>>
我的友情链接
查看>>
JavaScript 时间日期处理库
查看>>
iptables
查看>>
linux下及Aix下编译命令总结
查看>>
Python爬虫实战(3):安居客房产经纪人信息采集
查看>>
我的友情链接
查看>>
Java Network Programming, Third Edition
查看>>
mongodb启动时的一些参数
查看>>
ubuntu密码忘了、sudoers文件坏了等解决办法
查看>>
使用Spark和MemSQL Spark连接器运行实时应用
查看>>