串口监听工具listen_串口调试工具(读取温度值)

这是一个C#实现的串口监听工具,能够作为TCP Server或Client进行数据交互。通过监听串口数据,可以解析出温度和湿度值,并在界面上显示。程序提供了发送不同指令的功能,用于控制设备或获取反馈。
摘要由CSDN通过智能技术生成

【实例简介】服务端 客户端一体化

【实例截图】

【核心代码】

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace NetWork

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

int a = 0;

int b = 0;

int c = 0;

IPAddress ip;

IPEndPoint point = new IPEndPoint(IPAddress.Any,0);

string protocol;

Socket aimSocket;

Socket mySocket;

//IPEndPoint remote;

private void Form1_Load(object sender, EventArgs e)//初始化为UDP Server模式

{

cobProtocol.SelectedIndex = 0;

txtIP.Text = GetAddressIP();

Control.CheckForIllegalCrossThreadCalls = false;

}

string GetAddressIP()

{

string AddressIP = "";

foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)

{

if (_IPAddress.AddressFamily.ToString() == "InterNetwork")

{

AddressIP = _IPAddress.ToString();

ip = _IPAddress;//设定全局的IP

}

}

return AddressIP;

}

private void btnStart_Click(object sender, EventArgs e)//设置目标IP(Client),本地IP(Server)

{

try

{

if (protocol == "TCP Server")

{

mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));//绑定端口号

mySocket.Bind(point);//绑定监听端口

MessageBox.Show("TCP Server绑定成功");

mySocket.Listen(10);//等待连接是一个阻塞过程,创建线程来监听

Thread thReceive = new Thread(TSReceive);

thReceive.IsBackground = true;

thReceive.Start();

}

else if (protocol == "TCP Client")

{

ip = IPAddress.Parse(txtIP.Text);//目标IP

point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));//目标端口

aimSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

aimSocket.Connect(point);//连接服务器

MessageBox.Show("连接成功");

Thread thReceive = new Thread(TCReceive);

thReceive.IsBackground = true;

thReceive.Start();

}

}

catch

{}

}

private void cobProtocol_SelectedIndexChanged(object sender, EventArgs e)

{

// [2] TCP Server [3] TCP Client

//此处设置标准位??? 然后为btnConnect做准备?

protocol = cobProtocol.SelectedItem.ToString();

if (protocol == "TCP Server")

{

lblIP.Text = "本地IP地址:";

lblPort.Text = "本地端口号:";

}

else if (protocol == "TCP Client")

{

lblIP.Text = "服务器IP地址:";

lblPort.Text = "服务器端口号:";

}

}

private void btnSend_Click(object sender, EventArgs e)

{

try

{

byte[] buffer = Encoding.Default.GetBytes(txtSend.Text);

aimSocket.SendTo(buffer, point);

}

catch

{ }

}

//TCP Server接收线程

void TSReceive()

{

aimSocket = mySocket.Accept();//服务端监听到的Socket为服务端发送数据的目标socket

byte[] buffer = new byte[1024];

while (true)

{

try

{

int r = aimSocket.Receive(buffer);//接收到监听的Socket的数据

if (r == 0)

{

MessageBox.Show("连接断开");

break;

}

string strRec = Encoding.Default.GetString(buffer, 0, r);

txtRec.AppendText(aimSocket.RemoteEndPoint.ToString() ":" strRec "\r\n");

//温度解析

int p = -1;

int w = -1;

p=strRec.IndexOf("wendu:");

w=strRec.IndexOf("//wendu");

if ((p != -1)&&(w!=-1))

{

int length = w - p;

wendu.Text = strRec.Substring(p 6, length-6);

}

//湿度解析

int i = -1;

int u = -1;

i = strRec.IndexOf("shidu:");

u = strRec.IndexOf("//shidu");

if ((i != -1) && (u != -1))

{

int length = u - i;

shidu.Text = strRec.Substring(i 6, length - 6);

}

}

catch

{ }

}

}

//TCP Client接收线程

void TCReceive()

{

byte[] buffer = new byte[1024];

while (true)

{

try

{

int r = aimSocket.Receive(buffer);

if (r == 0)

{

MessageBox.Show("连接断开");

break;

}

string strRec = Encoding.Default.GetString(buffer, 0, r);

txtRec.AppendText(aimSocket.RemoteEndPoint.ToString() ":" strRec "\r\n");

//温度解析

int p = -1;

int w = -1;

p = strRec.IndexOf("wendu:");

w = strRec.IndexOf("//wendu");

if ((p != -1) && (w != -1))

{

int length = w - p;

wendu.Text = strRec.Substring(p 6, length - 6);

}

//湿度解析

int i = -1;

int u = -1;

i = strRec.IndexOf("shidu:");

u = strRec.IndexOf("//shidu");

if ((i != -1) && (u != -1))

{

int length = u - i;

shidu.Text = strRec.Substring(i 6, length - 6);

}

}

catch

{ }

}

}

private void button1_Click(object sender, EventArgs e)

{

try

{

if (a % 2 == 0)

{

byte[] buffer = Encoding.Default.GetBytes("111");

aimSocket.SendTo(buffer, point);

button1.BackColor = Color.Blue;

txtSend.Text = "111";

}

if (a % 2 == 1)

{

byte[] buffer = Encoding.Default.GetBytes("100");

aimSocket.SendTo(buffer, point);

button1.BackColor = Color.DarkGray;

txtSend.Text = "100";

}

a ;

}

catch

{ }

}

private void button2_Click(object sender, EventArgs e)

{

try

{

if (b % 2 == 0)

{

byte[] buffer = Encoding.Default.GetBytes("222");

aimSocket.SendTo(buffer, point);

button2.BackColor = Color.Blue;

txtSend.Text = "222";

}

if (b % 2 == 1)

{

byte[] buffer = Encoding.Default.GetBytes("200");

aimSocket.SendTo(buffer, point);

button2.BackColor = Color.DarkGray;

txtSend.Text = "200";

}

b ;

}

catch

{ }

}

private void button3_Click(object sender, EventArgs e)

{

try

{

if (c % 2 == 0)

{

byte[] buffer = Encoding.Default.GetBytes("333");

aimSocket.SendTo(buffer, point);

button3.BackColor = Color.Blue;

txtSend.Text = "333";

}

if (c % 2 == 1)

{

byte[] buffer = Encoding.Default.GetBytes("300");

aimSocket.SendTo(buffer, point);

button3.BackColor = Color.DarkGray;

txtSend.Text = "300";

}

c ;

}

catch

{ }

}

private void button4_Click(object sender, EventArgs e)

{

try

{

byte[] buffer = Encoding.Default.GetBytes("444");

aimSocket.SendTo(buffer, point);

txtSend.Text = "444";

}

catch

{ }

}

private void button5_Click(object sender, EventArgs e)

{

try

{

byte[] buffer = Encoding.Default.GetBytes("555");

aimSocket.SendTo(buffer, point);

txtSend.Text = "555";

}

catch

{ }

}

private void button6_Click(object sender, EventArgs e)

{

try

{

byte[] buffer = Encoding.Default.GetBytes("666");

aimSocket.SendTo(buffer, point);

txtSend.Text = "666";

}

catch

{ }

}

private void button7_Click(object sender, EventArgs e)

{

txtRec.Text = null;

}

private void button8_Click(object sender, EventArgs e)

{

txtSend.Text = null;

}

}

}

特点: 1).监控串口:具有端口监控功能,可以监控、拦截、保存所收发的数据(NT/2K/XP/Vista/Win7)。 2).串口调试:支持常用的串口操作功能,支持大数据量的收发、保存,支持自动发送。 3).动态变参:在不改变当前所打开端口的情况下,能动态改变端口参数(如:波特率、校验位、流控制等)。 4).双模编辑:数据发送区内嵌十六进制编辑器(类似UltraEdit),支持十六进制文本双模式切换编辑,支持unicode。 5).国际版本:国际版,支持多国语言。 6).无需安装:界面友好,方便易用。 简要描述: 1).用于串口调试,支持常用的110-256000波特率,支持自定义波特率。 2).能以字符或十六进制接收或发送任何数据,能发送、接收任意大小的文件。 3).在不改变当前所打开端口的情况下,能动态改变端口参数(如:波特率、校验位、流控制等)。 4).数据发送区可实时编辑、发送文本数据。 5).能将所接收的原始数据以及显示数据分别保存。 6).数据发送区允许设置发送周期,自动发送数据。 7).可调试的端口范围是COM1-COM255,支持扩展端口(USBRS232)。 8).可设置字体、文字颜色、背景颜色。 9).允许将发送区的数据在接收区回显,模拟终端操作。 10).允许发送区数据以回车键作为发送操作信号。 11).Terminal模式支持自动应答功能,支持Hex、Text、浮点数等类型。 12).Terminal模式支持预定义数据发送,支持Hex、Text、浮点数等类型。 13).Monitor模式支持彩色文本显示,便于更好的区分、观察数据. 14).允许Monitor模式下拦截到的数据以十六进制或字符方式显示。 15).允许接收区在接收到的数据后添加回车字符(CRLF),便于观察数据。 16).可将Terminal模式下接收到的数据按照十六进制文本方式导出到文件或剪贴板。 17).允许保存程序环境变量。 18).定义热键,方便操作。 19).国际版,支持多国语言。 20).数据发送区内嵌十六进制编辑器,支持unicode。 21).支持串口监控功能,可以监控串口设置以及收发的数据。 22).在线自动更新提示功能,当有可用新版本时提示用户下载。 23).本程序线程安全,可以同时启动多个副本调试多个串口。 A.程序拥有端口监控功能,可以监控内核事件并拦截所有通过指定端口收发的数据,该功能 目前只在2000/XP/2003平台上有效。 1.在使用监控功能前必须保证所要监控的端口处于关闭状态。 2.运行本程序,选择所要监控的端口并启动监控功能,然后启动要被监控的端口; B.程序第一次启动时自动设置语言,也可以手动在View->Language菜单项选择相应的语言, 目前支持英文、简体中文、繁体中文。 2.运行环境 --------------------- Windows 9x/2000/XP/2003/Vista/Win7 3.安装与卸载 --------------------- 运行解压软件,将压缩包解压到指定目录完成安装。卸载时只需将程序目录删除。 4.软件使用 --------------------- SUDT AccessPort 安装完成后即可使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值