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下载
  • 相关阅读:
    ssh协议运用
    linux系统安装oracle遇到的问题
    Qt中mysql编译出错问题
    winform控件添加鼠标事件
    Linux网络编程
    多线程
    守护进程
    openssl 生成自签CA和pkcs12证书
    Linux CPU使用率获取 c
    temp
  • 原文地址:https://www.cnblogs.com/LW-baiyun/p/7718925.html
Copyright © 2011-2022 走看看