C# http Post与Get方法控制继电器

---恢复内容开始---

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using SendNote;
namespace NetworkRelay//此命名空间关于网络继电器
{
class NetworkRelayControl//网络继电器控制类
{
/* static void Main(string[] args)
{

string resultControl = "relay4=off&relay8=off";

while(resultControl!="$")
{
resultControl = Console.ReadLine();
HttpStatusCode stat = postHttpCMD("admin", "12345678", "192.168.1.166", resultControl, 2000);//发送控制命令
string result=getHttpStat("admin", "12345678", "192.168.1.166", 2000);//读取控制状态
string[] Resultsplite= result.Split(new char[] { ‘&‘ });//状态拆分
for (int i = 0; i < Resultsplite.Length; i++)
{
Console.WriteLine(Resultsplite[i]);
}
}

}
* */
#region 采用post方法发送命令控制网络继电器
public static HttpStatusCode postHttpCMD(string username, string pswd, string ip, string postDataStr,int timeout)
{
HttpStatusCode result=HttpStatusCode.ExpectationFailed;
/*username为用户名
* pswd为密码
* url为post请求地址
* postDataStr为发送数据"relay1=on&relay2=off&relay3=on&relay4=off&relay5=on&relay6=on&relay7=off&relay8=on"表示继电器1:8的开关状态
* MsgEncode为字节编码
*timeout为http超时时间
*return 返回状态代码
*/
if (string.IsNullOrEmpty(ip))
{
LogHelper.WriteLog(typeof(NetworkRelayControl), "请求数据异常"+"时间" + DateTime.Now.ToString());
throw new ArgumentNullException("Url");

}
try
{

string Url = "http://" + ip + "/relay.cgi";//访问继电器的URL
LogHelper.WriteLogInfo(typeof(NetworkRelayControl), "访问地址为" + Url +"时间"+ DateTime.Now.ToString());
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);//创建url连接
request.PreAuthenticate = true;
NetworkCredential net = new NetworkCredential(username, pswd);//添加用户名与密码
request.Credentials = net;
byte[] data = Encoding.UTF8.GetBytes(postDataStr);
request.Method = "POST";//设置请求方法
request.ContentType = "application/x-www-form-urlencoded";//请求格式
request.Timeout = timeout;//设置超时时间
Stream reqStream = request.GetRequestStream();
reqStream.Write(data, 0, data.Length);//把数据写入请求的数据流
HttpWebResponse response = (HttpWebResponse)request.GetResponse();//获取请求返回对象
reqStream.Close();//关闭请求的输入流
result = response.StatusCode;
LogHelper.WriteLogInfo(typeof(NetworkRelayControl), "服务器状态代码为" + result + "时间" + DateTime.Now.ToString());
request.Abort();//释放请求资源
}
catch (HttpListenerException e)
{
LogHelper.WriteLog(typeof(NetworkRelayControl), "Http异常,异常信息为" + e.Message + "时间" + DateTime.Now.ToString());
}
catch (UriFormatException e)
{
LogHelper.WriteLog(typeof(NetworkRelayControl), "Uri异常,异常信息为" + e.Message + "时间" + DateTime.Now.ToString());
}
catch (Exception e)
{
LogHelper.WriteLog(typeof(NetworkRelayControl), "请求异常,异常信息为" + e.Message + "时间" + DateTime.Now.ToString());
}
return result;

}
#endregion

#region 采用GET方法获取网络继电器的状态
public static string getHttpStat(string username,string pswd,string ip,int timeout)//使用get方法获取继电器的相关状态
{
/*
*username为用户名
* pswd 为用户密码
* ip 为ip地址
* return 字符串 relay1....8=on/off
*/
string result = String.Empty;
string url = "http://"+ip +"/relaystat.cgi";
LogHelper.WriteLogInfo(typeof(NetworkRelayControl), "访问地址为" + url + "时间" + DateTime.Now.ToString());
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//创建url连接
request.PreAuthenticate = true;
NetworkCredential net = new NetworkCredential(username, pswd);//添加用户名与密码
request.Credentials = net;
request.ContentType = "text/html;charset=UTF-8";//请求类型
request.Method = "GET";//请求方法
request.Timeout = timeout;//设置请求超时时间
HttpWebResponse response = (HttpWebResponse)request.GetResponse();//获取返回对象
if(response.StatusCode.Equals(HttpStatusCode.OK))
{
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
result = reader.ReadToEnd();//读取返回的数据
reader.Close();//关闭流
}
request.Abort();//释放请求资源
}catch(Exception e)
{
LogHelper.WriteLog(typeof(NetworkRelayControl),"GET方法发生异常,异常信息为" + e.Message + " 时间:" + DateTime.Now.ToString());
}
return result;
}
#endregion
}
}

---恢复内容结束---

时间: 2024-07-28 12:30:23

C# http Post与Get方法控制继电器的相关文章

嵌入式软件容易犯的错误和规避方法总结

当今世界,放眼江湖,有电子的地方就有嵌入式软件,有电子故障的地方,也就有嵌入式软件设计缺陷的影子.那么捷配小编今天就把软件所容易犯的错误和规避的方法一一罗列,并给出应对之法.嵌入式软件的最大特点是以控制为主,软硬结合的较多,功能性的操作较多,模块相互间调用的较多,外部工作环境复杂容易受到干扰或干扰别的设备,且执行错误的后果不仅仅是数据错误而是有可能导致不可估量的灾难,所以总结起来,嵌入式软件可靠性设计需注意的问题有四个方面:1.软件接口先说软件接口中容易出问题的地方和编程人员容易犯的错误.软件接

Unity 崩溃问题解决方法——之一

友情提示:工作随记,不喜勿喷 注意:文艺青年可以略过,暴力青年欢迎采纳 Library文件夹 Unity每次编译都会生成这个东西,不用担心丢失的问题.所以,干掉他! 选中 + Delete   或者  选中 + Shift  + Delete 网上看了很多方法,就觉得这个简单,粗暴,是我喜欢的类型. 优点:上面说了 缺点:如果工程过大,重新编译时间会比较长.(但是对于查Log日志来说,相对快点)

Java TM 已被阻止,因为它已过时需要更新的解决方法

公司的堡垒机需要通过浏览器登陆,且该堡垒机的网站需要Java的支持,最近通过浏览器登陆之后总是提示"java TM 已被阻止,因为它已过时需要更新的解决方法"导致登陆之后不能操作, 但是操作系统中确实已经安装了比较新的JDK,安装的JDK版本是jdk-7u67-windows-i586,因为太烦人,所以决定搞清楚报错的原因,一劳永逸,彻底解决这个问题 准备工作:安装JDK,安装版本jdk-7u67-windows-i586.exe,因为机器的Eclipse还依赖64位的JDK,所以另安

win7 64位系统 PB连接oracle数据库出现“oracle library oci.dll could not be loaded”问题的解决方法

今天与大家分享一个自己的学习笔记,希望能给遇到同样问题的人带来帮助. 不知道大家在win7 64位系统下用 PB连接oracle数据库时,是否遇到过“oracle library oci.dll could not be loaded”问题. 今天,在win7 64位系统下用 PB连接oracle数据库时,一直出现上述错误,在百度上找了很久,都没有找到一个完整的解决方案,咨询了很多人,(他们都说是我的PB和oracle没装好,但我装的时候没出现任何问题,一切都很顺利,而且PB和oracle都能正

C#与数据库访问技术总结(八)之ExecuteNonQuery方法

ExecuteNonQuery方法 ExecuteNonQuery方法主要用来更新数据. 通常使用它来执行Update.Insert和Delete语句. 该方法返回值意义如下: 对于Update.Insert和Delete语句,返回值为该命令所影响的行数. 对于所有其他类型的语句,返回值为-1. Command对象通过ExecuteNonQuery方法更新数据库的过程非常简单,需要进行的步骤如下: (1)创建数据库连接. (2)创建Command对象,并指定一个SQL Insert.Update

android开发之onCreate( )方法详解

onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢? 先看看Google Android Developers官网上的解释: onCreate(Bundle) is where you initialize your activity. Most importantly, here you will usually call setContentView(int) with a layout resource d

MAC平台下Xcode配置使用OpenCV的具体方法 (2016最新)

1.序言: 1.1 背景 本人小白一枚,不过因为最近在从事机器视觉方面的工作,所以接触到OpenCV. 因为工作需求,本人要在MAC端使用OpenCV实现一些视觉功能,配置环境成了最大的阻碍,网上查了很多相关资料和博客,都因为版本环境问题屡试屡败,不过经历重重尝试,笔者最终还是配置成功并运行了自己的源码.当然成功的关键还是因为笔者站在了巨人的肩膀上,借鉴了很多网上的教程,为了不误导大家配置的过程,参考文章的地址统一放在文章里,望各位大大看见之后能够理解,废话不说进入正题. 1.2 环境说明 如果

正则化方法:L1和L2 regularization、数据集扩增、dropout

本文是<Neural networks and deep learning>概览 中第三章的一部分,讲机器学习/深度学习算法中常用的正则化方法.(本文会不断补充) 正则化方法:防止过拟合,提高泛化能力 在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合).其直观的表现如下图所示,随着训练过程,网络在training data上的error渐渐减小,但是在验证集上的error却反而渐渐增大--因为训练出来的网络过拟合了训练集,对训练集外的数据却不work

mac上 go-delve 安装出现The specified item could not be found in the keychain 解决方法

安装go语言的编译环境,在安装到 delve时候出现如下错误: If reporting this issue please do so at (not Homebrew/brew or Homebrew/core): https://github.com/go-delve/homebrew-delve/issues These open issues may also help: Upgrade to delve fails https://github.com/go-delve/homebr