Socket模拟Http协议

xiaoxiao2026-05-10  14

接收数据方法: /**/ /// <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; }
转载请注明原文地址: https://www.6miu.com/read-5048483.html

最新回复(0)