浏览 3940 次
锁定老帖子 主题:Socket模拟Http协议
精华帖 (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; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |