前言
软件或者生活中有时需要将信息同步至电子公告板上,利用C#可以快速实现这一目的,这里以软件公告场景设计,主要是将软件的版本号等相关信息同步至服务器,同步成功后,任务需要查找的人员只要有Web浏览器就可以快速查看更新信息;如果在社区公告场景也可以如法炮制。



客户端操作:
服务器显示:

注意: 这里只是列举主要逻辑代码。
利用C#提供的HttpWebRequest来进行Web访问(由于是CS这种结构,所以这个服务端也可以用其他语言进行编写,同理客户端也可以是多种语言进行编写),根据实际情况封装Post和Get请求。
private string Post(string str, string url) { string result = ""; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url+"?"+str); httpWebRequest.Method = "POST"; httpWebRequest.ContentType = "application/json; charset=UTF-8"; httpWebRequest.Timeout = 5000; //byte[] bytes = Encoding.UTF8.GetBytes(str); //httpWebRequest.ContentLength = (long)bytes.Length; using (StreamReader streamReader = new StreamReader(((HttpWebResponse)httpWebRequest.GetResponse()).GetResponseStream(), Encoding.UTF8)) { result = streamReader.ReadToEnd(); } return result; } private string Get(string url) { // ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(MesCommHelp.CheckValidationResult); string result = ""; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.Method = "GET"; httpWebRequest.ContentType = "application/json; charset=UTF-8"; httpWebRequest.Timeout = 2000; using (StreamReader streamReader = new StreamReader(((HttpWebResponse)httpWebRequest.GetResponse()).GetResponseStream(), Encoding.UTF8)) { result = streamReader.ReadToEnd(); } return result; } public string INIGetStringValue(string section, string key, string defaultValue) { string value = defaultValue; const int SIZE = 1024; if (string.IsNullOrEmpty(section)) { throw new ArgumentException("必须指定节点名称", "section"); } if (string.IsNullOrEmpty(key)) { throw new ArgumentException("必须指定键名称(key)", "key"); } StringBuilder sb = new StringBuilder(SIZE); uint bytesReturned = GetPrivateProfileString(section, key, defaultValue, sb, SIZE, _iniFile); if (bytesReturned != 0) { value = sb.ToString(); } sb = null; return value; } public bool INIWriteValue(string section, string key, string value) { if (string.IsNullOrEmpty(section)) { throw new ArgumentException("必须指定节点名称", "section"); } if (string.IsNullOrEmpty(key)) { throw new ArgumentException("必须指定键名称", "key"); } if (value == null) { throw new ArgumentException("值不能为null", "value"); } return WritePrivateProfileString(section, key, value, _iniFile); } private void ReadInfo() { BaseUrl = iniHelp.INIGetStringValue("MESInfo", "URL", ""); LastSn = iniHelp.INIGetStringValue("LastRecord", "SN", ""); LastDataTime = iniHelp.INIGetStringValue("LastRecord", "Time", ""); RecordFileName = iniHelp.INIGetStringValue("FileInfo", "Path", ""); EndSymbol = iniHelp.INIGetStringValue("FileInfo", "EndSymbol", "EndSymbol"); } public bool ReadFileInfo(out InfoItem infoItem) { infoItem = new InfoItem(); try { string[] allLines = File.ReadAllLines(RecordFileName); int i = allLines.Length - 1; bool IsHave = false; int endIndex = -1; for (; i > 0; i--) { if (string.IsNullOrEmpty(allLines[i])) { if (IsHave) { break; } } else { if (!IsHave) { IsHave = true; endIndex = i; } } } i = i + 1; string firstRow = allLines[i]; string descInfo = string.Empty; for (int j = i + 1; j <= endIndex; j++) { string item = allLines[j]; if (!item.EndsWith(EndSymbol)) { item += EndSymbol; } string[] arrs= item.Split('、'); if (arrs.Length>1) { if (int.TryParse( arrs[0],out int id)) { Console.WriteLine("切割后处理:" + arrs[0]); item = item.Replace(arrs[0] + "、", arrs[0] + "."); } } descInfo += item; } string[] strs = firstRow.Split(' '); infoItem = new InfoItem(strs[1], strs[0], descInfo); return true; } catch (System.Exception ex) { ErrStr = ex.Message; return false; } } private void UpdataRecordToIni(string sn) { iniHelp.INIWriteValue("LastRecord", "SN", sn); iniHelp.INIWriteValue("LastRecord", "Time", DateTime.Now.ToString()); } internal bool UpdataRecord(InfoItem infoItem) { string info = $"SN={infoItem.SN}&Datetime={infoItem.DateTime}&Info={ infoItem.DescrInfo}"; try { string res = mes.ExePost(info, BaseUrl); if (res.Contains("成功")) { UpdataRecordToIni(infoItem.SN); return true; } ErrStr = "服务器响应消息为失败"; return false; } catch (System.Exception ex) { ErrStr = ex.Message; return false; } } private bool CheckInfo(string sn, string dateInfo, string str) { if (string.IsNullOrEmpty(sn)) { SetInfo("版本号不能为空", false); return false; } if (!Regex.IsMatch(sn, "^(?\\d{1,2})\\.(?\\d{1,2})\\.(?\\d{1,2})$")) { SetInfo("版本号格式不正确", false); return false; } if (string.IsNullOrEmpty(dateInfo)) { SetInfo("日期不能为空", false); return false; } if (!Regex.IsMatch(dateInfo, "^(?\\d{2,4})-(?\\d{1,2})-(?\\d{1,2})$")) { SetInfo("日期格式不正确", false); return false; } if (string.IsNullOrEmpty(str)) { SetInfo("描述信息不能为空", false); return false; } return true; }
上一篇:Java云原生技术概述