最简单的推送提醒服务-Bark

在某个大楼里,安装了一个实时监控的设备。但是由于这栋大楼目前还处于全面施工的状态,因此这个监控设备,不停的被施工方掐点,断网等等,状况百出,也是令人防不胜防。。于是,一直在想,有没一个很简单的方法,看获知目前这个监控设备的状态。方法倒是有,例如利用各种云平台的推送服务,但是感觉都不像是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链接地址,如下图所示

最简单的推送提醒服务-Bark_第1张图片

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点,我就推送了一个“今天带饭了吗”。。发送完毕后,只听见叮的一声,手机上已经收到了推送的信息。

最简单的推送提醒服务-Bark_第2张图片

到此,就差不多结束了。只不过目前还没有Android的安装包。。希望哪位大神赶快弄一个。。

针对这个监控设备,如果隔个30分钟收不到推送信息,那就证明这台监控设备出问题了。

你可能感兴趣的:(Linux学习历程)