您的位置:首页 > 理论基础 > 计算机网络

c# 通过socket模拟HTTP协议,解析HTTP包头

2008-03-18 18:41 495 查看
找到很好的文章,可以应用到我正在开发的彩信MM7协议中
C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#C#

**//// <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; //返回


}
c#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c#c#
方法重载

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;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: