添加TCP通讯功能(发送) - (第十四讲)
视频讲解如下:
工程源码下载:GPS定位系统系列教程源码下载
在上一节中,我们已经实现了接收的功能,今天这个章节,给大家演示如何实现发送。对于当前项目来说,发送功能其实是用不到的,因为我们最终要实现的功能是下位机定时上报GPS的坐标信息。不过为了能够更好的讲解整个系统的功能使用,我这里也顺便加了个发送的功能,即:用户通过在前端页面点击发送按钮,当下位机接收到命令之后,再主动上报GPS数据。也就是将下位机主动采集GPS数据上报,改成了上位机手动采集。
1、前端页面修改
前端页面改动主要添加发送按钮,已经向后端进行数据请求的post调用方法,添加的按钮如下:

接着是js请求代码:
/* 手动读取下位机数据 */
function ReadData() {
$.post('Home/SendOrder', null, function (resJson) {
var res = JSON.parse(resJson);
if (!res.Success) {
layer.alert(res.ErrorCode, { title: '下发失败', icon: 5 });
}
else {
layer.alert(res.Msg, { title: '下发成功', icon: 5 });
}
});
}
2、HomeController.cs控制器修改
在HomeController.cs文件中,新增一个SendOrder()方法:
/// <summary>
/// 手动下发采集命令
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
public ActionResult SendOrder()
{
AjaxResult res = new AjaxResult() { Success = false };
try
{
// 由于初始化的时候,设置的设备类型是1,设备号也是1,所以这边查询的时候也要按这个参数查询
Link.Equipment.GpsModel sense = Link.Res.Socs.FirstOrDefault(v => v.equi == 1 && v.equino.ByteToInt() == 1) as Link.Equipment.GpsModel;
if (sense != null)
{
if(sense.socketstate == 1)
{
// 下发命令,可以带参数,这里用0
int ret = sense.SetState(0);
if (ret == 0) res.Msg = "命令发送成功.";
if (ret == 1) res.Msg = "命令发送失败.";
if (ret == -1) res.Msg = "网络错误.";
res.Success = true;
}
else throw new Exception($"设备链接已断开");
}
else throw new Exception($"未查询到设备");
}
catch (Exception e)
{
res.ErrorCode = e.Message;
}
return Content(res.ToJson());
}
3、运行测试
由于博主这里采用的是博主自己写的模拟器进行测试,并且带有自动反馈功能,如需要该模拟器的,可以自己去群文件里面下载,或者自己手动反馈,反馈命令:CC 01 00 01 00 0D 01 00 C0
