软件界面:
exe下载链接:
https://download.csdn.net/download/busiruoli/16035853
一、制作目的
为了学习关于Socket和104规约制作的一个调试工具,掌握通信机制。
制作出来可以作为104设备遥控老化测试。
二、实现方案
1、技术选型:
- 语言:c#
- 工具:Visual Studio 2019 (社区版)
2、功能介绍
可以链接104设备,根据实际情况填写对应设备IP、端口号,链接之后可以发送104遥控报文,可选择开关地址,定时发送时间。发送遥控形式为控合控分交替形式。
发送报文如下:
//遥控 分 选择报文68 0E 02 00 12 00 2D 01 06 00 01 00 01 60 00 80
byte[] data1 = { 0x68, 0x0E, 0x02, 0x00, 0x12, 0x00, 0x2D, 0x01, 0x06, 0x00, 0x01, 0x00, 0x01, 0x60, 0x00, 0x80 };
//遥控 分 执行报文68 0E 04 00 14 00 2D 01 06 00 01 00 01 60 00 00
byte[] data2 = { 0x68, 0x0E, 0x04, 0x00, 0x14, 0x00, 0x2D, 0x01, 0x06, 0x00, 0x01, 0x00, 0x01, 0x60, 0x00, 0x00 };
//遥控 合 选择报文68 0E 02 00 12 00 2D 01 06 00 01 00 01 60 00 81
byte[] data3 = { 0x68, 0x0E, 0x02, 0x00, 0x12, 0x00, 0x2D, 0x01, 0x06, 0x00, 0x01, 0x00, 0x01, 0x60, 0x00, 0x81 };
//遥控 合 执行报文68 0E 04 00 14 00 2D 01 06 00 01 00 01 60 00 01
byte[] data4 = { 0x68, 0x0E, 0x04, 0x00, 0x14, 0x00, 0x2D, 0x01, 0x06, 0x00, 0x01, 0x00, 0x01, 0x60, 0x00, 0x01 };
三、核心代码:
1、连接服务器
#region 连接服务器
private void btn_Connect_Click(object sender, EventArgs e)
{
#region
#endregion
IPAddress address = IPAddress.Parse(this.tbx_IP.Text.Trim());
IPEndPoint Ipe = new IPEndPoint(address, int.Parse(this.tbx_Port.Text.Trim()));
sockClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
this.txt_Rcv.AppendText("与服务器连接中......" + Environment.NewLine);
sockClient.Connect(Ipe);
}
catch (Exception ex)
{
MessageBox.Show("连接失败" + ex.Message, "建立连接");
return;
}
this.txt_Rcv.AppendText("与服务器连接成功" + Environment.NewLine);
this.btn_close.Enabled = true;
this.btn_Connect.Enabled = false;
thrClient = new Thread(ReceiceMsg);
thrClient.IsBackground = true;
thrClient.Start();
}
#endregion
2、委托方法体
#region 委托方法体
private void FileSave(byte[] bt, int length)
{
try
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "word files(*.docx)|*.docx|txt files(*.txt)|*.txt|xls files(*.xls)|*.xls|All files(*.*)|*.*";
if (sfd.ShowDialog() == DialogResult.OK)
{
string fileSavePath = sfd.FileName;
using (FileStream fs = new FileStream(fileSavePath, FileMode.Create))
{
fs.Write(bt, 1, length - 1);
Invoke(new Action(() => this.txt_Rcv.AppendText("[保存] 保存文件成功" + fileSavePath + Environment.NewLine)));
}
}
}
catch (Exception ex)
{
MessageBox.Show("保存异常" + ex.Message, "保存文件出现异常");
}
}
#endregion
结尾
需要源码的小伙伴可以留言评论,或者私信我。
欢迎评论点赞加关注,我会继续努力的!