基于多串口ETH005设备的Socket网络编程

简介: 利用多串口设备进行Socket网络编程1、安装多串口服务器ETH005软件。软件下载地址:http://download.

利用多串口设备进行Socket网络编程

1、安装多串口服务器ETH005软件。软件下载地址:http://download.csdn.net/detail/taomanman/6762173

2、打开ETH005软件,点击“扫描”,如下图:

3、会搜索到设备的IP地址,修改串口COM1的串口波特率为9600,通讯方式修改为485通信,远程IP修改成192.168.0.2,然后点击“连接”,如下图:

4、连接完成后,点击“配置”,如下图:

5、点击“读取配置信息”,如下图:

 

6、打开串口调试助手,配置远程主机和远程端口号信息,然后连接网络,然后输入十六进制数,然后发送,接收区会将结果输出,如下图:

 

 

开始编程:使用Socket进行网络编程,发送指令,获取数据

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1、             建立Socket连接

Socket newclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ie = new IPEndPoint(IPAddress.Parse("192.168.0.18"), 50001);
try
{
     newclient.Connect(ie);
}
 catch (SocketException e)
{

     MessageBox.Show("连接服务器失败:" + e.Message);
     return;
}
ThreadStart myThreaddelegate = new ThreadStart(ReceiveMsg);
myThread = new Thread(myThreaddelegate);
myThread.Start();

 

2、             发送指令

///<summary>
///发送温湿度数据
///</summary>
public void SendWSD()
{
    string wsd = "01 03 00 00 00 03 05 cb";
    int m_length = wsd.Length;
    byte[] data = new byte[m_length];
    //十六进制字符串转换成字符数组(01 03 00 00 00 03 05 cb)
    data = ConvertHelper.strToToHexByte(wsd);
    int i = newclient.Send(data, data.Length, 0);
    //showMsg("温湿度发送消息为:" + wsd + "\r\n");
}

 
public static class ConvertHelper
{

    ///<summary>   
    /// 16进制字符串转字节数组   
    ///</summary>   
   ///<param name="hexString"></param>   
   ///<returns></returns>   
    public static byte[] strToToHexByte(string hexString)
    {

        hexString = hexString.Replace(" ", "");
        if ((hexString.Length % 2) != 0)
           hexString += " ";
        byte[] returnBytes = new byte[hexString.Length / 2];
        for (int i = 0; i < returnBytes.Length; i++)
            returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2).Trim(), 16);
        return returnBytes;
   }

 
    ///<summary>   
    ///字节数组转16进制字符串   
     ///</summary>   
    ///<param name="bytes"></param>   
    ///<returns></returns>   
     public static string byteToHexStr(byte[] bytes)
     {

        string returnStr = "";
        if (bytes != null)
        {
             for (int i = 0; i < bytes.Length; i++)
             {
                 returnStr += bytes[i].ToString("X2");
             }
        }
        return returnStr;
    }

 

    ///<summary>
    ///十六进制转十进制
    ///</summary>
   ///<param name="hex"></param>
   ///<returns></returns>
    public static string Hex2Ten(string hex)
    {
        int ten = 0;
        for (int i = 0, j = hex.Length - 1; i < hex.Length; i++)
        {
            ten += HexChar2Value(hex.Substring(i, 1)) * ((int)Math.Pow(16, j));
            j--;
        }
        return ten.ToString();
    }
}

3、             接收数据

  ///<summary>
  ///接收消息
  ///</summary>
  public void ReceiveMsg()
  {
    while (true)
    {
        byte[] data = new byte[1024];
        int recv = newclient.Receive(data);
        string stringdata = Encoding.UTF8.GetString(data, 0, recv);
        //将所读取的字符串转换为字节数组
        byte[] content = Encoding.ASCII.GetBytes(stringdata);
        if (recv <= 0)
               break;
        string hexString = ConvertHelper.byteToHexStr(content);
        string sd = hexString.Substring(6, 4);
        string wd = hexString.Substring(10, 4);
       //showMsg("温湿度接收到的返回值串为:" + hexString + "\r\n");
        //处理后的温湿度数值
        double csd = double.Parse(ConvertHelper.Hex2Ten(sd)) / 100;
        double cwd = (double.Parse(ConvertHelper.Hex2Ten(wd)) - 27315) / 100;
        showMsg("湿度值为:" + csd + "% 采集时间:[" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "]\r\n");
        showMsg("温度值为:" + cwd + "℃ 采集时间:[" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "]\r\n");
     }
  }

 

    ///<summary>
    ///显示消息
    ///</summary>
   ///<param name="msg"></param>
   public void showMsg(string msg)
   {
      {
          //在线程里以安全方式调用控件
           if (receiveMsg.InvokeRequired)
           {
                MyInvoke _myinvoke = new MyInvoke(showMsg);
                receiveMsg.Invoke(_myinvoke, new object[] { msg });
            }
            else
            {
                receiveMsg.AppendText(msg);
            }
       }
  }
 


 

相关文章
|
9天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
9天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
25天前
|
安全 网络安全 网络虚拟化
【软件设计师备考 专题 】常用网络设备和各类通信设备(一)
【软件设计师备考 专题 】常用网络设备和各类通信设备
97 2
|
28天前
|
监控 Linux Shell
【Shell 命令集合 网络通讯 】Linux管理终端设备的登录过程 getty命令 使用指南
【Shell 命令集合 网络通讯 】Linux管理终端设备的登录过程 getty命令 使用指南
32 0
|
8天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
24 6
|
28天前
|
安全 Shell Linux
【Shell 命令集合 网络通讯 】Linux 打开终端设备 mingetty命令 使用指南
【Shell 命令集合 网络通讯 】Linux 打开终端设备 mingetty命令 使用指南
38 0
|
7天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
11天前
|
边缘计算 网络虚拟化 虚拟化
虚拟网络设备性能优化
在现代网络架构中,虚拟网络设备扮演着越来越重要的角色🌐,特别是在云计算☁️和容器化技术📦广泛应用的背景下。虚拟网络设备如虚拟以太网设备(veth)、虚拟交换机(vSwitch)、和虚拟路由器等,提供了灵活的网络连接和隔离方案🔗。然而,与物理网络设备相比,虚拟网络设备在处理能力💪、带宽利用率📈和延迟⏳方面可能存在性能瓶颈。因此,性能优化成为了虚拟网络设备管理中的一个重要议题🛠️。本文将探讨虚拟网络设备的性能优化手段,帮助网络管理员更有效地利用这些设备。
|
11天前
|
安全 网络安全 网络虚拟化
虚拟网络设备与网络安全:深入分析与实践应用
在数字化时代📲,网络安全🔒成为了企业和个人防御体系中不可或缺的一部分。随着网络攻击的日益复杂和频繁🔥,传统的物理网络安全措施已经无法满足快速发展的需求。虚拟网络设备🖧,作为网络架构中的重要组成部分,通过提供灵活的配置和强大的隔离能力🛡️,为网络安全提供了新的保障。本文将从多个维度深入分析虚拟网络设备是如何保障网络安全的,以及它们的实际意义和应用场景。
|
12天前
|
Python
Python网络编程基础(Socket编程)UDP服务器编程
【4月更文挑战第8天】Python UDP服务器编程使用socket库创建UDP套接字,绑定到特定地址(如localhost:8000),通过`recvfrom`接收客户端数据报,显示数据长度、地址和内容。无连接的UDP协议使得服务器无法主动发送数据,通常需应用层实现请求-响应机制。当完成时,用`close`关闭套接字。