0
点赞
收藏
分享

微信扫一扫

梅科尔工作室-14天华为培训六

一、UDP客户端

1.1UDP协议相关API介绍

socket.h接口简介:这个socket.h中包含声明UDP协议相关接口函数。

梅科尔工作室-14天华为培训六_封装

1.2UDP客户端创建流程介绍

梅科尔工作室-14天华为培训六_封装_02

1.3实现UDP客户端

打开"D3_ iot udp client" 工程的udp client. demo.c文件,可在代码中查看实现UDP客户端的代码。

g_ _wifi EventHandler .0nHotspotStaJoin = OnHotspotStaJoinHandler;

g_ wifiEventHandler .0nHotspotStaleave = OnHotspotStaLeaveHandler;

g_ wifiEventHandler .OnHotspotStateChanged = OnHotspotStateChangedHandler ;

error = RegisterWifiEvent (&g_ WifiEventHandler);

if (error != WIFI_ SUCCESS)

printf(' "RegisterWifiEvent failed, error = %d. \r\n" , error);

return -1;

HotspotConfig config = {0};

strcpy( config.ssid, AP_ SSID);

strcpy( config . preSharedKey, AP_ PSK);

config. securityType = WIFI_ _SEC_ TYPE_ _PSK;

config. band = HOTSPOT BAND_ TYPE_ _2G;

config. channelNum = 7;

error = SetHotspotConfig(&config);

if (error != WIFI_ SUCCESS)

printf("SetHotspotConfig failed, error = %d.\r\n", error);

return -1;

}

error = EnableHotspot();

if (error != WIFI_ SUCCESS)

printf("EnableHotspot failed, error = %d.\r\n", error);

return -1;

}

if (IsHotspotActive() == WIFI_ HOTSPOT_ NOT_ ACTIVE)

printf("Wifi station is not actived. \r\n");

return -1;

g_ apEnableSuccess = 0;

WaitAResult();

二、TCP服务端

2.1TCP协议相关API介绍

socket.h接口简介:这个socket.h中包含声明TCP协议相关接口函数。

梅科尔工作室-14天华为培训六_服务端_03

2.2TCP服务端创建流程介绍

梅科尔工作室-14天华为培训六_服务端_04

2.3实现TCP服务端

打开"D4 iot tcp server"工程的tcp_ server_ demo.c文件,, 可以查看实现

TCP服务的代码。

g_ _wifi EventHandler .0nHotspotStaJoin = OnHotspotStaJoinHandler;

g_ wifiEventHandler .0nHotspotStaLeave = OnHotspotStaleaveHandler;

g_ wifiEventHandler .0nHotspotStateChanged = OnHotspotStateChangedHandler;

error = RegisterWifiEvent (&g_ WifiEventHandler);

if (error != WIFI_ SUCCESS)

{printf( " RegisterWi fiEvent failed, error = %d. \r\n" , error);

return -1;}

HotspotConfig config = {0};

strcpy(config.ssid, AP_ SSID);

strcpy( config . preSharedKey, AP_ PSK);

config. securityType = WIFI_ SEC_ TYPE_ PSK;

config. band = HOTSPOT BAND_ TYPE_ _2G;

config . channelNum = 7;

error = SetHotspotConfig(&config);

if (error != WIFI_ SUCCESS)

{printf( "SetHotspotConfig failed, error = %d. \r\n", error);

return -1;}

error = EnableHotspot();

if (error != WIFI_ SUCCESS)

{printf("EnableHotspot failed, error = %d.\r\n", error);

return -1;}

if (IsHotspotActive() == WIFI_ HOTSPOT_ NOT_ _ACTIVE)

{printf("Wifi station is not actived. \r\n");

return -1;}

g_ apEnableSuccess = 0;

WaitAPResult();

三、TCP客户端

实现TCP客户端

static void TCPClientTask(void)

struct sockaddr_ in send_ addr;

socklen_ _t addr_ 1ength = sizeof(send_ addr);

char recvBuf[512];

Wi fiConnect( "Hold"," 0987654321");

if ((sock_ fd = socket(AF_ INET, SOCK_ STREAM, 0)) == -1)

{perror(" create socket failed ! \r\n");

exit(1);}

send_ addr.sin_ family = AF_ INET;

send_ addr.sin_ port = htons(_ PROT_ );

send_ addr.sin_ addr.s_ addr = inet_ addr("192. 168 .0.175");

addr_ 1ength = sizeof(send_ addr);

connect(sock_ fd,(struct sockaddr *)&send_ addr, addr_ 1ength);

while (1){

bzero(recvBuf, sizeof(recvBuf));

if ((ret = send(sock_ fd, send_ data, strlen(send_ data), 0)) == -1)

{perror("send : ");}

if ((ret = recv(sock_ fd, recvBuf, sizeof(recvBuf), 0) == -1)

{printf("recv error \r\n");}

printf("recv :%s\r\n", recvBuf);

}

close(sock_ fd);

}

四、UDP服务端

static void UDPServerTask( void)

struct sockaddr. _in server. sock;

struct sockaddr_ in client_ sock;

socklen_ t sin_ size;

WifiConnect( "Hold","0987654321");

if ((sock. _fd = socket(AF_ _INET, SOCK_ DGRAM, 0)) == -1)

{perror("socket is error\r\n");

exit(1);}

bzero(&server_ sock, sizeof(server_ sock));

server_ sock.sin_ family = AF_ INET;

server. sock.sin_ addr.s_ addr = htonl(INADDR _ANY);

server_ sock.sin_ port = htons(_ PROT. );

if (bind(sock_ fd,(struct sockaddr *)&server_ sock, sizeof(server. sock)) == -1)

{perror("bind is error\r\n");

exit(1);}

ssize_ t ret;

while (1)

{

sin_ size = sizeof (struct sockaddr. in);

bzero(recvbuf,sizeof(recvbuf));

if ((ret = recvfrom(sock_ _fd, recvbuf, sizeof(recvbuf), 0,(struct sockaddr *)&client_ sock, &sin_ size)) == -1)

{

printf("recv error \r\n");

}

printf("recv :%s\r\n", recvbuf);

if ((ret = sendto(sock _fd,buf, strlen(buf), 0,(struct sockaddr * )&client_ sock, sizeof(client_ sock))) == -1)

{perror("send : ");}

}

}

}

五、MQTT客户端

5.1MQTT介绍

MQTT (Message Queuing Tel emetry Transport, 消息队列遥测传输协议),是一种基于发布/订阅(publis h/ subscribe)模式的‘轻量级通讯协议,该协议构建于TCP/ IP协议上,由IBM在1999年发布。

梅科尔工作室-14天华为培训六_服务端_05

Paho是IBM在2011年建立的Eclipse开源项目,该项目包含以C. Java. Python, Javascript等语言编写的可用客户端。

5.2Paho MQTT文件目录介绍

●MQTTClient: 封装MQTTPacket生成的高级别C++客户端程序。

●MQTTClient-C: 封装MQTTPacket生成的高级别C客户端程序

samples目录提供F reeRTOS和1 inux两个例程,分别支持FreeRTOS和

Linux系统。

src目录提供MQTTClient的代码实现能力,以及用于移植到对应平台的

网络驱动

●MQTTPacket: 提供MQTT数据包的序列化与反序列化,以及部分辅助

函数。

5.3如何使用Paho MQTT协议

梅科尔工作室-14天华为培训六_封装_06

5.4实现MQTT客户端

打开"D5 iot_ mqtt"工程的iot mqtt.c文件,查看实现MQTT客户端的代码。

NetworkConnect (&network,"192. 168.0.175",1883);

printf("MQTTClientInit ... \n")

MQTTClientInit(&client,&network, 2000, sendBuf, sizeof(sendBuf), readBuf, sizeof(readBuf));

MQTTString clientId = MQTTString. initializer;

clientId.cstring = "bearpi";

MQTTPacket_ connectData data = MQTTPacket_ connectData_ initializer;

data. clientID       = clientId;

data . willFlag      = 0

data . MQT TVersion     = 3

data . keepAliveInterval = 0

data . cleansession   =1

printf ("MQTTConnect ... \n");

rc = MQTTConnect(&client, &data);

if(rc!=0){

printf("MQTTConnect: %d\n", rc);

NetworkDisconnect ( &network);

MQTTDisconnect(&client);

osDelay(200);

goto begin;

}

printf("MQTTSubscribe ...\n");

rc = MQTTSubscribe(&client, "test", 2,messageArrived);

if(rc!=0){

printf("MQTTSubscribe: %d\n", rc);

osDelay(200);

goto begin;

}

while (++count)

{

MQTTMessage message;

char payload[30];

message .q0S = 2;

message. retained = 0

message . payload = payload;

sprintf( payload, "message number %d",count);

message . payloadlen = strlen(payload);

if (rc = MQTTPublish(&client, " pubtopic", &message)) != 0)

{

printf("Return code from MQTT publish is %d\n", rc);

NetworkDi sconnect (&network);

MQTTDisconnect(&client);

goto begin;

}

osDelay(50);

}

举报

相关推荐

0 条评论