论坛首页 移动开发技术论坛

Socket模拟Http协议

浏览 3937 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2009-02-06  

接收数据方法:

/**/ ///   <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;
  }
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics