【计算机网络课程设计】2019-智能家居协议设计

本文档描述了一个基于socket的物联网系统设计,包括服务器端和客户端。服务器端接收并处理来自客户端(模拟的温度、湿度传感器和空调设备)的数据,并根据协议控制设备。客户端模拟设备,产生并发送数据到服务器。实验涉及物联网通信协议、数据处理和设备控制,适用于智能家居场景。
摘要由CSDN通过智能技术生成

题目描述:

  1. 智能家居协议设计

    实现一个基于socket的物联网服务器,接收来自客户端的数据。实现一个物联网客户端,模拟设备。客户端产生数据,发送至服务器,服务器根据协议对数据作出处理。

需要模式的设备有:

   温度传感器:采集房间温度信息。

   湿度传感器:采集房间湿度信息。

   空调:可以根据服务器发来的指令进行调节模式(制冷、制热、送风)、设置温度、风速;还可以根据服务器的指令上传子自己的当前状态:模式、温度、风速。

   门窗磁:可以根据服务器发来的指令打开或者关闭窗户。

要求:

   设计通信协议完成数据的双向传输,应用层协议应包含首部和数据部分。


学校:烟台大学计算机与控制工程学院2017级

完成时间:2019.12

老师:赵老师


具体实现过程参考附带的链接资源,此处只提供源码和一些实验指导,因为已经是放寒假已经半个月了,所以博客写的有些时间久远,大部分思路是在链接资源的实验报告里面:

CSDN资源:https://download.csdn.net/my

百度云:链接:https://pan.baidu.com/s/1DBFi4i2g1lL3MoQC6MQAGA 
提取码:54hx 

压缩包里面还有个一复杂版本的,那是我原来从GitHub上找的demo,比较完整,而且实现一些死锁问题的解决方案。


本次实验时间还是比较长的。但是实验还是比较匆忙的完成,因为大家都是提前验收的,没有考虑一些像是死锁一样的问题。


server.cpp

#include<iostream>
#include<stdio.h>
#include<Winsock2.h>
#include<fstream>
#include<cstdio>
using namespace std;
#pragma comment(lib, "ws2_32.lib")
char recv_buf[100];
char send_buf[100];

void print(char *s)
{
    int t, p;
    if(s[3] == '0'){  //温度传感器
        p = 0;
        t = 6;
        int tem;    // 温度
        int start_num = s[4] - '0';
        int num = s[5] - '0';
        cout<<"------------------------------------"<<endl;
        cout<<"收到来自"<<num<<"个温度传感器的数据:如下"<<endl;
        while(num--){
            tem = 0;
            tem += (s[t++] - '0')*10;
            tem += (s[t++] - '0');
            cout<<start_num+p<<"号位置温度为:"<<tem<<"°  ";
            p++;
        }
        cout<<"\n------------------------------------"<<endl;
    }
    else if(s[3] == '1'){ //湿度传感器
        p = 0;
        t = 6;
        int shidu;    // 湿度
        int start_num = s[4] - '0';
        int num = s[5] - '0';
        cout<<"收到来自"<<num<<"个湿度传感器的数据:";
        while(num--){
            shidu = 0;
            shidu += (s[t++] - '0')*10;
            shidu += (s[t++] - '0');
            cout<<start_num+p<<"号位置湿度为:"<<shidu<<"%  ";
            p++;
        }
    }
    cout<<endl;
    return ;
}

int main()
{

    WORD wsa = MAKEWORD(2,2);
    WSADATA wsaData;
    if(WSAStartup(wsa, &wsaData)!=0)
    {
        cout<<"初始化失败"<<endl;   //这进行初始化
        return 0;
    }
    //创建套接字
    SOCKET s_server = socket(AF_INET, SOCK_STREAM, 0);
    //AF_INET   面向网络的  IPV4
    //AF_INET6用于第6版因特网协议(IPv6)寻址
    //SOCK_STREAM   TCP链接   面向链接    SOCK_DGRAM 无连接 UDP
    if(s_server==INVALID_SOCKET) //INVALID_SOCKET是-1 错误标志
    {
        cout<<"socket创建失败"<<endl;
        return 0;
    }
    //这里配置server配置信息
    sockaddr_in server_addr;    //创建sockaddr_in结构体
    server_addr.sin_family = AF_INET;   //IPV4协议
    server_addr.sin_port = htons(8888);     //本地端口8888
    server_addr.sin_addr.S_un.S_addr = INADDR_ANY;   //设置地址 监听本地端口
    //利用bind函数将socket和配置信息绑定
    //bind通常和

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值