当前位置:  编程技术>.net/c#/asp.net

C# Socket粘包处理讲解示例

    来源: 互联网  发布时间:2014-10-25

    本文导语:  当socket接收到数据后,会根据buffer的大小一点一点的接收数据,比如: 对方发来了1M的数据量过来,但是,本地的buffer只有1024字节,那就代表socket需要重复很多次才能真正收完这逻辑上的一整个消息。对方发来了5条2个字符的...

当socket接收到数据后,会根据buffer的大小一点一点的接收数据,比如:

对方发来了1M的数据量过来,但是,本地的buffer只有1024字节,那就代表socket需要重复很多次才能真正收完这逻辑上的一整个消息。
对方发来了5条2个字符的消息,本地的buffer(大小1024字节)会将这5条消息全部收入囊下...
那么,如何处理呢?下面我以最简单的一种文本消息来demo

根据上面所描述的情况,最重要的关键落在了下面3个因素的处理上

消息的结尾标记
接收消息时判断结尾标记
当本次buffer中没有结尾标记时怎么处理
我把写好的核心算法贴出来:

代码如下:

StringBuilder sb = new StringBuilder();             //这个是用来保存:接收到了的,但是还没有结束的消息
        public void ReceiveMessage(object state)            //这个函数会被以线程方式运行
        {
            Socket socket = (Socket)state;
            while(true)
            {
                byte[] buffer = new byte[receiveBufferSize];  //buffer大小,此处为1024
                int receivedSize=socket.Receive(buffer);

                string rawMsg=System.Text.Encoding.Default.GetString(buffer, 0, receivedSize);
                int rnFixLength = terminateString.Length;   //这个是指消息结束符的长度,此处为rn
                for(int i=0;i


    
 
 

您可能感兴趣的文章:

  • 使用C#开发Socket通讯的方法
  • C# Socket连接请求超时机制实现代码分享
  • c# socket编程udp客户端实现代码分享
  • C#实现Socket通信的解决方法
  • c# socket网络编程接收发送数据示例代码
  • 学习C# Socket入门实例代码
  • C#实现的Socket服务器端、客户端代码分享
  • c#(Socket)同步套接字代码示例
  • c#(Socket)同步套接字代码的实例代码
  • C#中使用Socket获取网页源代码的代码
  • C#使用Socket获取网页源代码的实例代码
  • c#(Socket)异步套接字代码示例
  • C# Socket 异步套接字的代码一例
  • C#之Socket操作类实例解析
  • C#开发之Socket网络编程TCP/IP层次模型、端口及报文等探讨
  • php通过socket_bind()设置IP地址代码示例
  • python实现socket客户端和服务端简单示例
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • python实现socket端口重定向示例
  • java实现socket从服务器连续获取消息的示例
  • 简单的java socket客户端和服务端示例
  • udp socket客户端和udp服务端程序示例分享
  • .net的socket异步通讯示例分享
  • tcp socket客户端和服务端示例分享
  • vc++实现的tcp socket客户端和服务端示例
  • 简单的socket编程入门示例
  • C语言socket编程开发应用示例
  • java网络编程之socket网络编程示例(服务器端/客户端)
  • php使用socket编程示例
  • socket 示例程序疑问
  • Linux网络编程之UDP Socket程序示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java socket编程实例代码讲解
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • java命名空间java.net类socket的类成员方法: gettrafficclass定义及介绍
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • java命名空间java.net类socket的类成员方法: getport定义及介绍
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • java命名空间java.net类socket的类成员方法: getlocalport定义及介绍
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • java命名空间java.net类socket的类成员方法: getinetaddress定义及介绍
  • 我的ping程序怎么老是出现Socket operation on non-socket
  • java命名空间java.net类socket的类成员方法: isconnected定义及介绍
  • sco unix 下输入 man socket 居然显示 man:socket not found up有分




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3