您的位置:首页 > 理论基础 > 计算机网络

winform通过https与服务器进行通信

2015-08-18 20:44 489 查看
C#做客户端(winfrom)是非常方便的。

当winfrom通过https与服务器进行通信时,可以选择json,xml等数据结构封装要传输的数据。

下面是以xml封装数据,以https与server进行通信的函数:

/// <summary>
/// 通过post与server进行通信
/// </summary>
/// <param name="xml">以xml格式封装的数据</param>
/// <param name="url">服务器地址</param>
/// <returns>数据以xml格式返回</returns>
public string post(string xml, string url)
{
string xmlStr = null;
try
{
byte[] bs = Encoding.UTF8.GetBytes(xml);//以字节数组读入数据

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);//这里写服务器地址
req.Method = "POST";//与服务器通信格式
//req.ContentType = "application/x-www-form-urlencoded";
req.ContentType = "application/xml";//设置client与server通信的数据结构
req.ContentLength = bs.Length;
//req.ReadWriteTimeout();

Stream reqStream = req.GetRequestStream();//获取服务端的返回值

reqStream.Write(bs, 0, bs.Length);

WebResponse result = req.GetResponse();
Stream ReceiveStream = result.GetResponseStream();
StreamReader sr = new StreamReader(ReceiveStream);
xmlStr = sr.ReadToEnd();//服务端返回的数据值,根据你们的协议,你可以去解析收到的数据
}
catch (Exception ex)
{
LogHelper.WriteLog(typeof(Form1), ex);//记录错误日志
}

return xmlStr;
}


https以安全著称,但是有时因为各种原因,需要跳过验证证书的合法性,这时候,就需要在代码中做出相应的修改。

添加如下函数:

/// <summary>
/// 该函数的作用就是,不验证证书的合法性。
/// </summary>
/// <param name="sender"></param>
/// <param name="cert"></param>
/// <param name="chain"></param>
/// <param name="error"></param>
/// <returns></returns>
private static bool RemoteCertificateValidate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
{
// trust any certificate!!!
System.Console.WriteLine("Warning, trust any certificate");
//为了通过证书验证,总是返回true
return true;
}


之后,在post函数中添加如下语句:

//验证服务器证书回调自动验证
ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  winform post xml 服务器