http 异步 接收 回传 数据文字和文件流

Posted qc-id-01

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http 异步 接收 回传 数据文字和文件流相关的知识,希望对你有一定的参考价值。

       public void HttpListenerStar()
        {
            try
            {
                HttpListener httpListener = new HttpListener();
                httpListener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
                httpListener.Prefixes.Add("http://+:8080/");              
                httpListener.Start();
                httpListener.BeginGetContext(new AsyncCallback(GetContextCallBack), httpListener);

            }
            catch (Exception ex)
            {
                writeLog(ex.ToString());
            }
        }

        private void GetContextCallBack(IAsyncResult ar)
        {
            System.Net.HttpListener listerner = ar.AsyncState as System.Net.HttpListener;
            HttpListenerContext requestContext = listerner.EndGetContext(ar);
            try
            {
                Thread th = new Thread(new ThreadStart(delegate
                {
                    HttpListenerDataParsing(requestContext);
                }));
                th.Start();

            }
            catch (Exception ex)
            {
                try
                {
                    requestContext.Response.StatusCode = 500;
                    requestContext.Response.ContentType = "text/html";
                    requestContext.Response.ContentEncoding = Encoding.UTF8;
                    byte[] buffer = System.Text.Encoding.UTF8.GetBytes("System Error");
                    //对客户端输出相应信息.  
                    requestContext.Response.ContentLength64 = buffer.Length;
                    System.IO.Stream output = requestContext.Response.OutputStream;
                    output.Write(buffer, 0, buffer.Length);
                    //关闭输出流,释放相应资源  
                    output.Close();
                }
                catch (Exception ee)
                {
                    writeLog(ee.ToString());
                }
            }
            listerner.BeginGetContext(new AsyncCallback(GetContextCallBack), listerner);
        }


       private void HttpListenerDataParsing(HttpListenerContext request)
        {
            byte[] content_to_bytes = null;
            try
            {
                string RawUrl = request.Request.RawUrl;
                writeLog(DateTime.Now + "
" + RawUrl);
                string refData = "";
                String ip = request.Request.RemoteEndPoint.Address.ToString();
                if (ipTable.ContainsKey(ip) || (ip.Length > 10 && ip.Substring(0, 10) == "192.168.1."))
                {
                    string type = HttpUtility.ParseQueryString(RawUrl.Substring(1, RawUrl.Length - 1))["type"];  //不要问我问什么要减1 ,我特么也不知道为什么加了一斜杠就解析不出来了
                    string time = HttpUtility.ParseQueryString(RawUrl.Substring(1, RawUrl.Length - 1))["time"];
                    string sign = HttpUtility.ParseQueryString(RawUrl.Substring(1, RawUrl.Length - 1))["sign"];

                    if (type == "get")
                    {
                       refData= Encoding.UTF8.GetBytes("ok");
                    }
                    else if (type == "down")
                    {
                        if (time != null && time != "" && sign != null && sign != "")
                        {
                            string voiceName = Path.Combine(voicePath, time, sign);
                            if (!File.Exists(voiceName))
                                voiceName = "1243.txt";
                            using (FileStream reader = new FileStream(voiceName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                            {
                                request.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(sign, System.Text.Encoding.UTF8));
                                request.Response.ContentType = "application/octet-stream";
                                request.Response.StatusCode = 200;
                                request.Response.Headers.Add("Access-Control-Allow-Origin", "*");
                                request.Response.ContentEncoding = Encoding.UTF8;
                                request.Response.ContentLength64 = reader.Length;
                                var output = request.Response.OutputStream;
                                int length = (int)reader.Length;
                                byte[] pReadByte = new byte[length];
                                int read = 0;
                                //断点发送 在这里判断设置reader.Position即可
                                while ((read = reader.Read(pReadByte, 0, length)) != 0)
                                {
                                    output.Write(pReadByte, 0, read);
                                }
                                output.Close();
                                reader.Close();
                            }
                            return;
                        }

                    }
                }
                else
                {
                    refData = "Not is iptable";
                }
                content_to_bytes = Encoding.UTF8.GetBytes(refData);
                request.Response.ContentType = "application/json";
                request.Response.StatusCode = 200;
                request.Response.Headers.Add("Access-Control-Allow-Origin", "*");
                request.Response.ContentEncoding = Encoding.UTF8;
                request.Response.ContentLength64 = content_to_bytes.Length;
                var output1 = request.Response.OutputStream;
                output1.Write(content_to_bytes, 0, content_to_bytes.Length);
                output1.Close();
            }
            catch (Exception ex)
            {
                writeLog(ex.ToString());
            }

        }

 

以上是关于http 异步 接收 回传 数据文字和文件流的主要内容,如果未能解决你的问题,请参考以下文章

微信支付异步通知的回传参数为空

arc音频回传功能需要投影支持吗

将 Json 回传数据转换为 XML

Layui的数据表格增删改,后端回传json格式封装

使用angularjs的$http.post异步提交数据时,服务器接收不了的问题

关于图片和文字一起上传java如何接收的问题