recv java_recv()函数没有收到

SA,

我正在尝试创建套接字并从接入点接收数据和日志,当我从shell运行代码时,代码正常工作 . 但是,当我尝试使用运行该命令的execvp从代码连接到AP时

sudo iwconfig wlan0 essid "access point name"

recv函数不再从代码或shell中工作,似乎在运行此命令时某些设置已更改但我不确定究竟是什么改变了

这就是我创建套接字的方式

memset(&proc_addr, 0, sizeof(struct sockaddr_nl));

proc_addr.nl_family = AF_NETLINK;

proc_addr.nl_pid = getpid();

proc_addr.nl_groups = CN_IDX_IWLAGN;

if (bind(sock_fd, (struct sockaddr *)&proc_addr, sizeof(struct sockaddr_nl)) == -1)

exit_program_err(-1, "bind");

{

int on = proc_addr.nl_groups;

ret = setsockopt(sock_fd, 270, NETLINK_ADD_MEMBERSHIP, &on, sizeof(on));

if (ret)

exit_program_err(-1, "setsockopt");

}

while (1)

{

/* Receive from socket with infinite timeout */

printf("trying to receive");

ret = recv(sock_fd, buf, sizeof(buf), 0);

printf("received");

}

因此,虽然我可以从AP ping数据,但只打印接收然后没有打印

execvp代码:

string cmd1_connect = "sudo iwconfig wlan0 essid ciscosb_3";

string cmd_check = "sudo dhclient wlan0";

string cmd2_connect = "sudo iwconfig wlan0 essid Cisco13-guest";

while(true) {

if(stream1) {

shell->runcmd(&m, &cmd1_connect);

shell->runcmd(&m, &cmd_check);

} else {

shell->runcmd(&m, &cmd2_connect);

shell->runcmd(&m, &cmd_check); }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: InfluxDB是一个开源的分布式时序数据库,它提供了一系列聚合函数,可以用于对时序数据进行聚合和统计分析。在Java中,可以通过InfluxDB的Java API来使用这些聚合函数。 以下是一些使用InfluxDB聚合函数的实用案例: 1. 统计CPU使用率 假设我们需要统计服务器的CPU使用率,可以使用以下查询语句: ``` SELECT MEAN("usage_idle") FROM "cpu" WHERE "host" = 'server1' AND time > now() - 1h GROUP BY time(1m) ``` 这个查询语句使用了MEAN聚合函数,计算了过去一小时内每分钟的CPU使用率平均值。在Java中,可以使用InfluxDB的Java API来执行这个查询语句: ```java Query query = new Query("SELECT MEAN(\"usage_idle\") FROM \"cpu\" WHERE \"host\" = 'server1' AND time > now() - 1h GROUP BY time(1m)", "mydb"); QueryResult result = influxDB.query(query); ``` 2. 统计网络流量 假设我们需要统计服务器的网络流量,可以使用以下查询语句: ``` SELECT SUM("bytes_sent") AS "sent", SUM("bytes_recv") AS "received" FROM "net" WHERE "host" = 'server1' AND time > now() - 1h GROUP BY time(1m) ``` 这个查询语句使用了SUM聚合函数,计算了过去一小时内每分钟的网络流量总量。在Java中,可以使用InfluxDB的Java API来执行这个查询语句: ```java Query query = new Query("SELECT SUM(\"bytes_sent\") AS \"sent\", SUM(\"bytes_recv\") AS \"received\" FROM \"net\" WHERE \"host\" = 'server1' AND time > now() - 1h GROUP BY time(1m)", "mydb"); QueryResult result = influxDB.query(query); ``` 3. 统计磁盘使用情况 假设我们需要统计服务器的磁盘使用情况,可以使用以下查询语句: ``` SELECT MAX("used_percent") AS "used" FROM "disk" WHERE "host" = 'server1' AND time > now() - 1h GROUP BY time(1m) ``` 这个查询语句使用了MAX聚合函数,计算了过去一小时内每分钟的磁盘使用率最大值。在Java中,可以使用InfluxDB的Java API来执行这个查询语句: ```java Query query = new Query("SELECT MAX(\"used_percent\") AS \"used\" FROM \"disk\" WHERE \"host\" = 'server1' AND time > now() - 1h GROUP BY time(1m)", "mydb"); QueryResult result = influxDB.query(query); ``` ### 回答2: InfluxDB是一个开源的分布式时间序列数据库,适用于高性能、高可扩展性和高度可用性的工作负载。它具有强大的聚合功能,能够对数据进行统计和计算。以下是一些InfluxDB聚合函数JAVA中的实用案例: 1. 查询平均值:使用`mean()`函数可以计算指定时间范围内的平均值。例如,我们可以使用以下代码查询最近一小时内某个传感器的平均温度: ```java Query query = new Query("SELECT mean(temperature) FROM sensors WHERE time > now() - 1h", "database_name"); QueryResult result = influxDB.query(query); ``` 2. 查询计数:使用`count()`函数可以计算指定时间范围内数据的数量。例如,我们可以使用以下代码查询最近一天内某个传感器的数据点数量: ```java Query query = new Query("SELECT count(*) FROM sensors WHERE time > now() - 1d", "database_name"); QueryResult result = influxDB.query(query); ``` 3. 查询最大值和最小值:使用`max()`和`min()`函数可以分别计算指定时间范围内数据的最大值和最小值。例如,我们可以使用以下代码查询最近一周内某个传感器的最高温度和最低温度: ```java Query query = new Query("SELECT max(temperature), min(temperature) FROM sensors WHERE time > now() - 1w", "database_name"); QueryResult result = influxDB.query(query); ``` 4. 查询百分位数:使用`percentile()`函数可以计算指定时间范围内数据的百分位数。例如,我们可以使用以下代码查询最近一月内某个传感器的温度在90%以上的值: ```java Query query = new Query("SELECT percentile(temperature, 90) FROM sensors WHERE time > now() - 30d", "database_name"); QueryResult result = influxDB.query(query); ``` 总之,InfluxDB的聚合函数提供了丰富的功能,可以帮助我们对大量时间序列数据进行统计和计算。通过在JAVA中使用这些聚合函数,我们可以方便地分析和处理数据,并获得有用的洞见。 ### 回答3: InfluxDB 是一个开源的分布式时序数据库,专为高性能、高可扩展性和高可用性而设计。它提供了各种聚合函数,可以对时序数据进行灵活的计算和分析。在 JAVA 中使用 InfluxDB 聚合函数,可以实现各种实用的案例,下面将介绍几个常见的应用案例。 1. 数据降采样:时序数据往往非常庞大,可以使用 InfluxDB 的聚合函数对数据进行降采样,减小数据量,提高查询效率。例如,可以使用 InfluxDB 的 MEAN 聚合函数计算指定时间范围内的平均值,并将结果存储在降采样后的时间间隔内。 2. 数据统计分析:InfluxDB 的聚合函数可以用于对时序数据进行统计分析,例如计算某个时间范围内数据点的总数、最大值、最小值、平均值等。这些统计指标可以帮助我们更好地理解数据的特征和趋势,从而做出相应的决策。 3. 时间窗口聚合:时序数据往往具有周期性,可以使用 InfluxDB 的聚合函数对数据进行时间窗口聚合。例如,可以使用 InfluxDB 的SUM聚合函数计算某个时间窗口内的数据点之和,用于分析某一时间段内的数据趋势。 4. 数据平滑处理:在时序数据中,可能会存在异常值或噪声,可以使用 InfluxDB 的聚合函数对数据进行平滑处理,去除异常值或噪声。例如,可以使用 InfluxDB 的 moving_average() 函数计算数据的移动平均值,从而平滑数据曲线。 综上所述,InfluxDB 的聚合函数JAVA 中的应用非常广泛,可以实现数据降采样、统计分析、时间窗口聚合和数据平滑处理等多种实用案例。这些聚合函数提供了强大的功能,帮助我们更好地理解和处理时序数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值