Socket 模拟Http协议发送图片文件 c#篇

来源:互联网 发布:linux 标准输出重定向 编辑:程序博客网 时间:2024/06/05 05:48

发送文件的代码

 private static void SendFile()        {            FileStream fs = File.Open(@"D:\Test\1.gif", FileMode.Open);            StringBuilder sb = new StringBuilder();            sb.Append("POST /Default.aspx HTTP/1.1\r\n");            sb.Append("Host: 192.168.1.123\r\n");            sb.Append("Accept-Encoding: gzip\r\n");            sb.AppendFormat("Content-Length: {0}\r\n", fs.Length);            sb.Append("Content-Type: application/octet-stream\r\n");            sb.Append("Content-Transfer-Encoding: binary\r\n");            sb.Append("\r\n");            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            sock.Connect(new IPEndPoint(IPAddress.Parse("192.168.1.123"), 80));            int r = sock.Send(Encoding.UTF8.GetBytes(sb.ToString()));            Console.WriteLine("成功发送头{0}byte", r);            byte[] bits = new byte[fs.Length];            fs.Read(bits, 0, (int)fs.Length);            r = sock.Send(bits);            Console.WriteLine("成功发送文件{0}byte", r);        }

接收图片的aspx页面

http://192.168.1.123/Default.aspx

public partial class _Default : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            ReceiveImage();        }        private void ReceiveImage()        {            Stream s = Request.InputStream;            FileStream fs = File.Create("D:\\test.png");<span style="white-space:pre"></span>            byte[] bits = new byte[Request.ContentLength];            int r = s.Read(bits, 0, Request.ContentLength); //么有判断返回值,网络不稳定时,数据有可能损坏            fs.Write(bits, 0, bits.Length);            fs.Flush();            fs.Close();        }    }

接收时应该判断 r 返回值,收取完整流,避免因网络问题造成数据丢失, 



0 0