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(); } } }
Json解析数据
添加NuGet程序包 Newtonsoft.Json
添加引用
using Newtonsoft.Json;
List<User> userSettings = JsonConvert.DeserializeObject<List<User>>(personalSettings.data.ToString());
上传文件
文件转字节
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 ""; } }