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

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, , 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
}
}

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

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

  1. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  2. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  3. 【.net 深呼吸】细说CodeDom(6):方法参数

    本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...

  4. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  5. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  6. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  7. ArcGIS 10.0紧凑型切片读写方法

    首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...

  8. [BOT] 一种android中实现“圆角矩形”的方法

    内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...

  9. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

随机推荐

  1. centos6.5下编译安装FFmpeg

    以下安装步骤基本来自官网,做个笔记以方便自己以后查看 http://trac.ffmpeg.org/wiki/CompilationGuide 1.安装依赖包 <span style=" ...

  2. python 3+djanjo 2.0.7简单学习(二)--创建数据库和模型

    我们紧接上次,这里将建立数据库,创建第一个模型提示:这里我们不需要去一直启动,django会在我们ctrl+s的时候自动刷新并启动服务,很方便吧  1.数据库配置 现在,打开 vote_mysite/ ...

  3. 2018.7.18 div,section,article的区别和使用

    section ·<section> 标签定义文档中的节(section.区段).比如章节.页眉.页脚或文档中的其他部分. ·section用作一段有专题性的内容,一般在它里面会带有标题. ...

  4. 【P1330】 封锁阳光大学

    两个和谐河蟹不能在同一条边的两端.所以对于每条边.只有一个节点有和谐河蟹 所以说,我们可以将有和谐河蟹的看做一种颜色,或则是状态.没有河蟹看做另一种言颜色 这样边变成了二分图染色 所以嗯~(・∀・) ...

  5. 【Java-POJO-设计模式】JavaEE中的POJO与设计模式中多态继承的冲突

    最近看<重构>谈到利用OO的多态来优化 if else 和 switch 分支语句,但是我发现OO语法中的多态在使用框架的JavaEE中是无法实践的.对此,我感到十分的疑惑,加之之前项目中 ...

  6. 通过ServletContext取Spring的WebApplicationContext

    当 Web 应用集成 Spring 容器后,代表 Spring 容器的 WebApplicationContext 对象将以WebApplicationContext.ROOT_WEB_APPLICA ...

  7. rcnn spp_net hcp

    rcnn开创性工作,但是计算时间太长,重复计算太大. spp_net将重复计算避免了. hcp是yan shuicheng那边的,是用bing生成regions,然后用normalized cut将这 ...

  8. npm run build根据不同参数打包不同环境url

    config文件夹下 dev.env.js中修改代码 'use strict' const merge = require('webpack-merge') const prodEnv = requi ...

  9. 《JSON笔记之二》----封装JSONUtil

    许多java开发人员对于fastjson再也熟悉不过了,这是alibaba开源的依赖,使用fastjson可以使我们很容易的把请求json串转换成为我们所需要的对象.list.map等对象格式,对于开 ...

  10. MARK 一条关于Linux 运维方面个人向收藏网址

    吴钧泽博客 https://wujunze.com/archives.html Linux运维笔记 https://blog.linuxeye.cn/ Linux中文网 http://www.ppze ...