zoukankan      html  css  js  c++  java
  • winform客户端+java后台

     客户端用winform写的  后台用JAVA  有点麻烦

        不过我们一步一步来

        目前用的是http传数据  c#只能转化为字节  这个慢慢写 后面再加 

        这篇写了挺久了  一直有其他事情

    c# 客户端 发送请求 得到响应

        public class WebClient
        {
            Encoding encoding = Encoding.UTF8; //Encoding.Default;
            string respHtml = "";
            WebProxy proxy;
            static CookieContainer cc;
            WebHeaderCollection requestHeaders;
            WebHeaderCollection responseHeaders;
            int bufferSize = 15240;
            public event EventHandler<UploadEventArgs> UploadProgressChanged;
            public event EventHandler<DownloadEventArgs> DownloadProgressChanged;
            static WebClient()
            {
                LoadCookiesFromDisk();
            }
            /// <summary>    
            /// 创建WebClient的实例    
            /// </summary>    
            public WebClient()
            {
                requestHeaders = new WebHeaderCollection();
                responseHeaders = new WebHeaderCollection();
            }
            /// <summary>    
            /// 设置发送和接收的数据缓冲大小    
            /// </summary>    
            public int BufferSize
            {
                get { return bufferSize; }
                set { bufferSize = value; }
            }
            /// <summary>    
            /// 获取响应头集合    
            /// </summary>    
            public WebHeaderCollection ResponseHeaders
            {
                get { return responseHeaders; }
            }
            /// <summary>    
            /// 获取请求头集合    
            /// </summary>    
            public WebHeaderCollection RequestHeaders
            {
                get { return requestHeaders; }
            }
            /// <summary>    
            /// 获取或设置代理    
            /// </summary>    
            public WebProxy Proxy
            {
                get { return proxy; }
                set { proxy = value; }
            }
            /// <summary>    
            /// 获取或设置请求与响应的文本编码方式    
            /// </summary>    
            public Encoding Encoding
            {
                get { return encoding; }
                set { encoding = value; }
            }
            /// <summary>    
            /// 获取或设置响应的html代码    
            /// </summary>    
            public string RespHtml
            {
                get { return respHtml; }
                set { respHtml = value; }
            }
            /// <summary>    
            /// 获取或设置与请求关联的Cookie容器    
            /// </summary>    
            public CookieContainer CookieContainer
            {
                get { return cc; }
                set { cc = value; }
            }
            /// <summary>    
            ///  获取网页源代码    
            /// </summary>    
            /// <param name="url">网址</param>    
            /// <returns></returns>    
            public string GetHtml(string url)
            {
                HttpWebRequest request = CreateRequest(url, "GET");
                respHtml = encoding.GetString(GetData(request));
                return respHtml;
            }
            /// <summary>    
            /// 下载文件    
            /// </summary>    
            /// <param name="url">文件URL地址</param>    
            /// <param name="filename">文件保存完整路径</param>    
            public void DownloadFile(string url, string filename)
            {
                FileStream fs = null;
                try
                {
                    HttpWebRequest request = CreateRequest(url, "GET");
                    byte[] data = GetData(request);
                    fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
                    fs.Write(data, 0, data.Length);
                }
                finally
                {
                    if (fs != null) fs.Close();
                }
            }
            /// <summary>    
            /// 从指定URL下载数据    
            /// </summary>    
            /// <param name="url">网址</param>    
            /// <returns></returns>    
            public byte[] GetData(string url)
            {
                HttpWebRequest request = CreateRequest(url, "GET");
                return GetData(request);
            }
            /// <summary>    
            /// 向指定URL发送文本数据    
            /// </summary>    
            /// <param name="url">网址</param>    
            /// <param name="postData">urlencode编码的文本数据</param>    
            /// <returns></returns>    
            public string Post(string url, string postData)
            {
                byte[] data = encoding.GetBytes(postData);     
                return Post(url, data);
            }
    
            //public string Post(string url, string postData,bool a) {
            //    HttpWebRequest request = CreateRequest(url, "POST");
    
            //   //postData= HttpUtility.UrlEncode(postData,encoding);
            //    request.ContentType = "application/x-www-form-urlencoded";
            //    request.ContentLength = postData.Length;
            //    request.KeepAlive = true;
            //    StreamWriter myWriter = null;
            //    myWriter = new StreamWriter(request.GetRequestStream());
            //    myWriter.Write(postData);
            //    respHtml = encoding.GetString(GetData(request));
            //    return respHtml;
    
            //}
    
            /// <summary>    
            /// 向指定URL发送字节数据    
            /// </summary>    
            /// <param name="url">网址</param>    
            /// <param name="postData">发送的字节数组</param>    
            /// <returns></returns>    
            public string Post(string url, byte[] postData)
            {
                HttpWebRequest request = CreateRequest(url, "POST");
                //var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
    
                request.ContentType = "application/x-www-form-urlencoded ";// ;charset=UTF8";
                request.ContentLength = postData.Length;
                request.KeepAlive = true;
                PostData(request, postData);
                respHtml = encoding.GetString(GetData(request));
                return respHtml;
            }
            /// <summary>    
            /// 向指定网址发送mulitpart编码的数据    
            /// </summary>    
            /// <param name="url">网址</param>    
            /// <param name="mulitpartForm">mulitpart form data</param>    
            /// <returns></returns>    
            //public string Post(string url, MultipartForm mulitpartForm)
            //{
            //    HttpWebRequest request = CreateRequest(url, "POST");
            //    request.ContentType = mulitpartForm.ContentType;
            //    request.ContentLength = mulitpartForm.FormData.Length;
            //    request.KeepAlive = true;
            //    PostData(request, mulitpartForm.FormData);
            //    respHtml = encoding.GetString(GetData(request));
            //    return respHtml;
            //}
            
            /// <summary>    
            /// 读取请求返回的数据    
            /// </summary>    
            /// <param name="request">请求对象</param>    
            /// <returns></returns>    
            public byte[] GetData(HttpWebRequest request)
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream stream = response.GetResponseStream();
                responseHeaders = response.Headers;
                //SaveCookiesToDisk();
    
                DownloadEventArgs args = new DownloadEventArgs();
                if (responseHeaders[HttpResponseHeader.ContentLength] != null)
                    args.TotalBytes = Convert.ToInt32(responseHeaders[HttpResponseHeader.ContentLength]);
    
                MemoryStream ms = new MemoryStream();
                int count = 0;
                byte[] buf = new byte[bufferSize];
                while ((count = stream.Read(buf, 0, buf.Length)) > 0)
                {
                    ms.Write(buf, 0, count);
                    if (this.DownloadProgressChanged != null)
                    {
                        args.BytesReceived += count;
                        args.ReceivedData = new byte[count];
                        Array.Copy(buf, args.ReceivedData, count);
                        this.DownloadProgressChanged(this, args);
                    }
                }
                stream.Close();
                //解压    
                if (ResponseHeaders[HttpResponseHeader.ContentEncoding] != null)
                {
                    MemoryStream msTemp = new MemoryStream();
                    count = 0;
                    buf = new byte[100];
                    switch (ResponseHeaders[HttpResponseHeader.ContentEncoding].ToLower())
                    {
                        case "gzip":
                            GZipStream gzip = new GZipStream(ms, CompressionMode.Decompress);
                            while ((count = gzip.Read(buf, 0, buf.Length)) > 0)
                            {
                                msTemp.Write(buf, 0, count);
                            }
                            return msTemp.ToArray();
                        case "deflate":
                            DeflateStream deflate = new DeflateStream(ms, CompressionMode.Decompress);
                            while ((count = deflate.Read(buf, 0, buf.Length)) > 0)
                            {
                                msTemp.Write(buf, 0, count);
                            }
                            return msTemp.ToArray();
                        default:
                            break;
                    }
                }
                return ms.ToArray();
            }
            /// <summary>    
            /// 发送请求数据    
            /// </summary>    
            /// <param name="request">请求对象</param>    
            /// <param name="postData">请求发送的字节数组</param>    
            private void PostData(HttpWebRequest request, byte[] postData)
            {
                int offset = 0;
                int sendBufferSize = bufferSize;
                int remainBytes = 0;
                Stream stream = request.GetRequestStream();
                StreamWriter mysw = new StreamWriter(stream);//, encoding);//Encoding.GetEncoding("utf-8"));
                //Console.WriteLine("请求编码StreamWriter--------------->" + mysw.Encoding);
                UploadEventArgs args = new UploadEventArgs();
                args.TotalBytes = postData.Length;
                //Console.WriteLine("请求编码request.TransferEncoding--------------->" + request.TransferEncoding);
                while ((remainBytes = postData.Length - offset) > 0)
                {
                    if (sendBufferSize > remainBytes) sendBufferSize = remainBytes;
                    stream.Write(postData, offset, sendBufferSize);
                    offset += sendBufferSize;
                    if (this.UploadProgressChanged != null)
                    {
                        args.BytesSent = offset;
                        this.UploadProgressChanged(this, args);
                    }
                }
                stream.Close();
            }
    
            /// <summary>    
            /// 发送请求数据    
            /// </summary>    
            /// <param name="request">请求对象</param>    
            /// <param name="postData">请求发送的字节数组</param>    
            private void PostData(HttpWebRequest request, string postData)
            {
                 Stream stream = request.GetRequestStream();
                StreamWriter mysw = new StreamWriter(stream, Encoding.GetEncoding("utf-8"));
                mysw.Write(postData);
                stream.Close();
            }
            /// <summary>    
            /// 创建HTTP请求    
            /// </summary>    
            /// <param name="url">URL地址</param>    
            /// <returns></returns>    
            private HttpWebRequest CreateRequest(string url, string method)
            {
                Uri uri = new Uri(url);
    
                if (uri.Scheme == "https")
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(this.CheckValidationResult);
    
                // Set a default policy level for the "http:" and "https" schemes.    
                HttpRequestCachePolicy policy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Revalidate);
                HttpWebRequest.DefaultCachePolicy = policy;
    
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
                request.AllowAutoRedirect = false;
                request.AllowWriteStreamBuffering = false;
                request.Method = method;
                if (proxy != null) 
                    request.Proxy = proxy;
                request.CookieContainer = cc;
                foreach (string key in requestHeaders.Keys)
                {
                    request.Headers.Add(key, requestHeaders[key]);
                }
                requestHeaders.Clear();
                return request;
            }
            private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {
                return true;
            }
            /// <summary>    
            /// 将Cookie保存到磁盘    
            /// </summary>    
            private static void SaveCookiesToDisk()
            {
                string cookieFile = System.Environment.GetFolderPath(Environment.SpecialFolder.Cookies) + "\webclient.cookie";
                FileStream fs = null;
                try
                {
                    fs = new FileStream(cookieFile, FileMode.Create);
                    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formater = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                    formater.Serialize(fs, cc);
                }
                finally
                {
                    if (fs != null) fs.Close();
                }
            }
            /// <summary>    
            /// 从磁盘加载Cookie    
            /// </summary>    
            private static void LoadCookiesFromDisk()
            {
                cc = new CookieContainer();
                string cookieFile = System.Environment.GetFolderPath(Environment.SpecialFolder.Cookies) + "\webclient.cookie";
                if (!File.Exists(cookieFile))
                    return;
                FileStream fs = null;
                try
                {
                    fs = new FileStream(cookieFile, FileMode.Open, FileAccess.Read, FileShare.Read);
                    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formater = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                    cc = (CookieContainer)formater.Deserialize(fs);
                }
                finally
                {
                    if (fs != null) fs.Close();
                }
            }
        }
    WebClient

    Json解析数据

    添加NuGet程序包  Newtonsoft.Json

    添加引用

    using Newtonsoft.Json;

     List<User> userSettings = JsonConvert.DeserializeObject<List<User>>(personalSettings.data.ToString());
    json解析

    上传文件

        文件转字节

     private byte[] FileContent(string fileName)
            {
                FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                try
                {
                    byte[] buffur = new byte[fs.Length];
                    fs.Read(buffur, 0, (int)fs.Length);
    
                    return buffur;
                }
                catch (Exception ex)
                {
                    throw ex;
               
                }
                finally
                {
                    if (fs != null)
                    {
    
                        //关闭资源  
                        fs.Close();
                    }
                }
            }
    转字节

    把字节转Base64字符串  拼接URL

     "userId=" + users.UserID + "&configurationFile=" + System.Web.HttpUtility.UrlEncode(Convert.ToBase64String(filebyte)) + "&configurationFileName=myAntoCAD.exe.zip" 

    下载

     public static string DwgDownload(this string url,string path) {
                using (WebClient wc = new WebClient()) {
    
                    string bdparh;
                    try
                    {
                         bdparh = Path.Combine(path,Path.GetFileName(url));
                        wc.DownloadFile(new Uri(url), bdparh);
                        return bdparh;
                    }
                    catch {
                        MessageBox.Show("图块不存在!");
    
                    }
                    return "";
                }
    
            }
    Web下载
  • 相关阅读:
    Poj 1742 Coins(多重背包)
    Poj 2350 Above Average(精度控制)
    求二进制数中1的个数
    Poj 1659 Distance on Chessboard(国际象棋的走子规则)
    Poj 2411 Mondriaan's Dream(压缩矩阵DP)
    Poj 2136 Vertical Histogram(打印垂直直方图)
    Poj 1401 Factorial(计算N!尾数0的个数——质因数分解)
    poj 2390 Bank Interest(计算本利和)
    Poj 2533 Longest Ordered Subsequence(LIS)
    Poj 1887 Testing the CATCHER(LIS)
  • 原文地址:https://www.cnblogs.com/LW-baiyun/p/7718925.html
Copyright © 2011-2022 走看看