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

  • Post author:
  • Post category:其他


题目描述:



  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通常和



版权声明:本文为Waybyway原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。