0
点赞
收藏
分享

微信扫一扫

Socket模拟Http协议


接收数据方法:

/**/ ///   <summary> 
    ///  接收数据的方法
    ///   </summary> 
    ///   <param name="socket"> Socket连接 </param> 
    ///   <param name="size"> 要接收的数据长度 </param> 
    ///   <returns> 返回收到的字节数组 </returns> 
   public   static   byte [] ReceiveData(Socket socket, int  size)
    
 {
     int  total = 0 ;      // 收到的总的字节数 
     int  dataleft = size;     // 剩余的字节数 
     byte [] data = new   byte [size];   // 接收数据的数组 
     int  rece = 0 ;       // 收到的字节数
     // 循环接收数据 
     while (total < size)
     
 {
       rece = socket.Receive(data,total,dataleft,SocketFlags.None);
        // 如果收到的字节数为0,那么说明连接断开,返回空的字节数组 
        if (rece == 0 )
        
 {
            break ;
       } 
       total += rece;      // 收到的字节数长度++ 
       dataleft -= rece;      // 剩余的字节数-- 
 
    } 
     return  data;       // 返回 
   }

 接收数据方法重载:

public   static   byte [] ReceiveData(Socket socket)
    
 {
    
    
    StringBuilder header = new  StringBuilder();
     string  headertext = "" ;
     while ( true )
     
 {
      byte [] data = new   byte [ 1 ];
      // 接收一个字节 
      int  rece = socket.Receive(data, 1 ,SocketFlags.None);
     
     
      // 转换为char 
      char  c = ( char )data[ 0 ];
     
     header.Append(c);
      // 检查是否到了包头末尾,如果到了包头末尾,那么停止
      // 读取 
      if (header.ToString().IndexOf( " /r/n/r/n " ) > 0 )
      
 {
       string  content = " CONTENT-LENGTH: " ;
       int  start = header.ToString().ToUpper().IndexOf(content);
      headertext = header.ToString().Substring(start + content.Length);
       int  end = headertext.IndexOf( " /r/n " );
      headertext = headertext.Substring( 0 ,end);  // 包体长度 
       break ;
     } 
    } 
     //
     byte [] ds = ReceiveData(socket,Convert.ToInt16(headertext));
     return  ds;
   }

举报

相关推荐

0 条评论