在某个大楼里,安装了一个实时监控的设备。但是由于这栋大楼目前还处于全面施工的状态,因此这个监控设备,不停的被施工方掐点,断网等等,状况百出,也是令人防不胜防。。于是,一直在想,有没一个很简单的方法,看获知目前这个监控设备的状态。方法倒是有,例如利用各种云平台的推送服务,但是感觉都不像是1,2天搞完的,毕竟俺不是做后台开发的人。。于是用google不停的搜索,终于发现了一个软件,叫做Bark的软件,暂时只支持IOS和电脑端。但是客户端和服务器都全部开源,因此要移植到Android上,也不会太难。具体的介绍,请看下面的链接:
https://www.appinn.com/bark-for-iphone/
客户端代码:https://github.com/Finb/Bark
服务器端代码:https://github.com/Finb/bark-server
看上去针对非常方便。于是就先拿过来测试一下看看呗。
1. 手机端安装,直接app store上下载bark,安装后,点击注册设备,弹出自己的http链接地址,如下图所示
2.在linux上实现https的post。我原以为必须要实现https,但是在浏览器里用http测试了一下,也是可以的,于是这一下子简单了。直接用C+socket实现一把得了。
参考https://blog.csdn.net/u013377887/article/details/62429457 资料,由于该post只需要url,不需要内容,因此稍微修改了下post的内容。代码如下所示:
#include
#include
void process_info(int fd)
{
int send_num;
char send_buf [] = "helloworld";
char recv_buf [4096];
char str1[4096];
while (1)
{
printf("begin send\n");
memset(str1,0,4096);
strcat(str1, "POST http://api.day.app/xxxxxxxxxx/今天带饭了吗? HTTP/1.1\r\n");
strcat(str1,"Host: api.day.app\r\n");
strcat(str1,"Content-Length: 0\r\n");
strcat(str1,"\r\n\r\n");
printf("str1 = %s\n",str1);
send_num = send(fd, str1,strlen(str1),0);
if (send_num < 0)
{
perror("send error");
return;
}
else
{
printf("send successful\n");
printf("begin recv:\n");
int recv_num = recv(fd,recv_buf,sizeof(recv_buf),0);
if(recv_num < 0){
perror("recv");
return;
} else {
printf("recv sucess:%s\n",recv_buf);
}
}
break;
sleep(5);
}
}
void main(void)
{
int sock_fd;
struct sockaddr_in addr_serv;
struct hostent* hostInfo;
sock_fd=socket(AF_INET, SOCK_STREAM, 0);
if (sock_fd < 0)
{
perror("sock error");
return;
}
else
{
printf("sock successful");
}
hostInfo = gethostbyname("api.day.app");
if(NULL == hostInfo)
{
printf("hostInfo is null\n");
return;
}
memset(&addr_serv, 0, sizeof(addr_serv));
addr_serv.sin_family = AF_INET;
addr_serv.sin_port = htons(80);
printf("Ip address = %s \n",inet_ntoa(*((struct in_addr*)hostInfo->h_addr)));
memcpy(&addr_serv.sin_addr, &(*hostInfo->h_addr_list[0]), hostInfo->h_length);
if (connect(sock_fd, (struct sockaddr*)(&addr_serv), sizeof(addr_serv)) < 0)
{
perror("connect error\n");
return;
}
else
{
printf("connect successful\n");
}
process_info(sock_fd);
}
编译,下载,运行结果如下:
root@debian:~/workspace/modbus# ./main
sock successfulIp address = 35.194.255.247
connect successful
begin send
str1 = POST http://api.day.app/xxxxx/今天带é¥äº†å—? HTTP/1.1
Host: api.day.app
Content-Length: 0
send successful
begin recv:
recv sucess:HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Tue, 30 Jul 2019 03:42:50 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 37
Connection: keep-alive
{"code":200,"data":null,"message":""}qò¶üPè‘c¤¾
里面的乱码,应该是中文字符造成的。由于临近12点,我就推送了一个“今天带饭了吗”。。发送完毕后,只听见叮的一声,手机上已经收到了推送的信息。
到此,就差不多结束了。只不过目前还没有Android的安装包。。希望哪位大神赶快弄一个。。
针对这个监控设备,如果隔个30分钟收不到推送信息,那就证明这台监控设备出问题了。