当前位置: 首页 > news >正文

广播,数据库01 day43

十三:广播和组播

一:广播

int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
| 参数名       | 说明                                                                                                          |
| --------- | ----------------------------------------------------------------------------------------------------------- |
| `sockfd`  | **套接字描述符**,即由 `socket()` 返回的文件描述符。                                                                          |
| `level`   | **设置的协议层级**,常见的有:<br>- `SOL_SOCKET`:通用 socket 级别选项<br>- `IPPROTO_TCP`:TCP 级别的选项<br>- `IPPROTO_IP`:IPv4 选项等。 |
| `optname` | **具体设置的选项名**,如:<br>- `SO_REUSEADDR`:地址复用<br>- `SO_RCVBUF`:接收缓冲区大小<br>- `SO_SNDTIMEO`:发送超时时间 等等。             |
| `optval`  | 指向包含**选项值的变量**的指针。根据选项不同,它可能是 `int`、`struct timeval` 等。                                                     |
| `optlen`  | `optval` 的大小,单位是字节(`sizeof(type)`)。                                                                  
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h> /* See NOTES */
#include <unistd.h>
#include <arpa/inet.h>
typedef struct sockaddr* (SA);
int main(int argc, char **argv) {int sockfd = socket(AF_INET,SOCK_DGRAM,0);if(-1 == sockfd){perror("socket");exit(1);}struct sockaddr_in ser, cli;ser.sin_family = AF_INET;ser.sin_port = htons(9999);//广播固定地址ser.sin_addr.s_addr =0;int ret = bind(sockfd, (SA)&ser, sizeof(ser));if (-1 == ret) {perror("bind");exit(1);}socklen_t len = sizeof(cli);while(1){char buf[512]={0};recvfrom(sockfd,buf,sizeof(buf),0,(SA)&cli,&len);printf("%s\n",buf);}return 0;
}
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h> /* See NOTES */
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>
typedef struct sockaddr* (SA);
int	main(int argc, char **argv)
{int sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (-1 == sockfd) {perror("socket");exit(1);}
//man 7 socket 208socklen_t on  =1;setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));struct sockaddr_in all;all.sin_family = AF_INET;all.sin_port = htons(9999);all.sin_addr.s_addr = inet_addr("192.168.0.255");//广播固定地址while(1){char buf[]="this is udp boardcast test...";sendto(sockfd,buf,strlen(buf),0,(SA)&all,sizeof(all));sleep(1);}return 0;
}

二:组播

先.r再.s

//recv#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h> /* See NOTES */
#include <unistd.h>
typedef struct sockaddr *(SA);
#define MUTIL_ADDR "235.1.2.3"
int main(int argc, char **argv) {int sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (-1 == sockfd) {perror("socket");exit(1);}//本机 地址struct sockaddr_in local, sendaddr;local.sin_family = AF_INET;local.sin_port = htons(9999);// ip is 0local.sin_addr.s_addr = INADDR_ANY;int ret = bind(sockfd,(SA)&local,sizeof(local));if(-1 ==ret){perror("bind");exit(1);}struct ip_mreqn multiaddr;multiaddr.imr_multiaddr.s_addr = inet_addr(MUTIL_ADDR);multiaddr.imr_address.s_addr = INADDR_ANY;// 0 to indicate any interface.multiaddr.imr_ifindex = 0;//把自己的地址加入组播地址//man 7 ip  89setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &multiaddr,sizeof(multiaddr));char sendaddrbuf[64] = {0};socklen_t len = sizeof(sendaddr);while (1) {char buf[512] = {0};recvfrom(sockfd, buf, sizeof(buf), 0, (SA)&sendaddr, &len);printf("%s:%d %s\n",inet_ntop(AF_INET, &sendaddr.sin_addr, sendaddrbuf,sizeof(sendaddrbuf)),ntohs(sendaddr.sin_port), buf);sprintf(buf, "%s %s", buf, "aaa");// send mutil castsendto(sockfd, buf, strlen(buf), 0, (SA)&sendaddr, sizeof(sendaddr));sleep(1);}return 0;
}
//send#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h> /* See NOTES */
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>
typedef struct sockaddr* (SA);
#define MUTIL_ADDR "235.1.2.3"
int main(int argc, char **argv) 
{int sockfd = socket(AF_INET,SOCK_DGRAM,0);if(-1 == sockfd){perror("socket");exit(1);}struct sockaddr_in cli,sendaddr;cli.sin_family = AF_INET;cli.sin_port = htons(9999);cli.sin_addr.s_addr =inet_addr(MUTIL_ADDR);char sendaddrbuf[64]={0};socklen_t len = sizeof(cli);while(1){char buf[512]="this is udp mulitcast test";//send mutil castsendto(sockfd,buf,strlen(buf),0,(SA)&cli,sizeof(cli));bzero(buf,sizeof(buf));recvfrom(sockfd,buf,sizeof(buf),0,(SA)&sendaddr,&len);printf("%s:%d %s\n",inet_ntop(AF_INET,&sendaddr.sin_addr,sendaddrbuf,sizeof(sendaddrbuf)),ntohs(sendaddr.sin_port),buf);}return 0;
}

数据库

一:基础概念

	sunsolaris  gnu

1、分类: 大型 中型 小型
ORACLE MYSQL/MSSQL SQLITE DBII powdb
关系型数据库
2、名词:
DB 数据库 select update database
DBMS 数据库管理系统
MIS 管理信息系统
OA 办公自动化
3、嵌入式数据库:
sqlite3 www.sqlite.org www.kernal.org
GNU
特点:
1、开源 C语言开发
2、代码量少 1万行左右,总大小10M以内
3、绿色软件无需安装
4、文件型数据库,可以移动。
5、数据容量最大 2T

SQL struct query language :关系型数据库 非关系 :芒果db
ddl data defination language 建表
dml 新增 修改 删除一行 data modifty
dql 查询 data query language 查询 select

二:sql命令

//系统维护命令
.databases             //列出当前库和系统中那个文件在关联
.q  or  .exit          // 退出		
.headers on|off        //Turn display of headers on or off 显示头信息的开关
.schema ?PATTERN?      //列出当前指定的xxx表结构 matching PATTERN// Add --indent for pretty-printing
.tables ?TABLE?        //List names of tables(列出当期数据库中的所有表)
//标准SQL语句		//所有的sql语句都以';'结尾
创建一个表:ddl		create table  表名(表字段1,表字段2...);eg:create table user(id int,name char,age int);          注意:以上表的表字段,支持如下数据类型。int text real(小数) blob(二进制数据)默认是text类型。char
----------------------------------------------------------------------
删除一个表:	drop table  表名;eg:drop table user;
----------------------------------------------------------------------
向表中增加数据:	insert into 表名 (字段名称 ) values (值名称);eg:insert into user (id,age) values (1,10);insert into user values(3,"wang",11);insert into user (age) values ( 12);
----------------------------------------------------------------------查询表中的数据:select 列名 from 表名  条件;eg:select * from user ; 显示表的所有的列select id from user; 显示idselect id,name from user where age <30 ;select id,name from user where name =  'lisi' ;select id,name from user where id>= 2 and id <=5;//and 和 or 和 not  -----对应,用英文,不用符号   && 和 || 和 !where name   like '三一'   %_  (通配符)like + 通配符:模糊查找%:有任意多的字符(0-任意多),eg:张三,可以  张,可以   可以%张   张%----张结尾的,,,张开头的_:有一个字符,eg:张_只能匹配张三,张__只能匹配张三三SELECT * FROM aaa WHERE name LIKE 'zhang%';ascselect *from user where age>20 or age<50 order by age desc limit 2 ;
-----------------------------------------------------------------------------修改表中数据:(不加条件的话,可能导致一列都会变)update 表名 set 表字段 = 值  满足条件:eg:  update user set id = 1 where name = 'li';update user set id = 1 where name = "li" and passwd = "123";update user set id = 2 where name = "li" or  name = "zhao";
--------------------------------------------------------------------------删除表中数据:delete from 表名  满足条件:eg:delete from user ;  ///删除表中所有数据delete from user where id  = 1; ///删除id=1 的数据;delete from user where id =1 and name = "zhang";delete from user where id = 1 or id  = 2;
//插入时间列int int;
插入时间列 int int;CREATE TABLE user1(id int,name char,age int,dt datetime);'2022-07-01 19:00:00'insert into user1 values (2,'张三',23,datetime('now','+8 hours'));//该空格,有的地方不要空格
-----------------------------------------------------------------------
自动增长列sqlite> CREATE TABLE user3(id INTEGER PRIMARY(主键) KEY ASC(升序),name char,age int,dt datetime); sqlite> insert into user3 (NULL,'李四',23,datetime('now'));   //在上一次的对应位置数值上自动 +1asc where (group by having) order by [desc] limit;select * from user where id<10 order by id limit 2;

三:sqlC语言

https://sqlite.org
https://sqlite.org/c3ref/intro.html

#include <sqlite3.h>
#include <stdio.h>int main(int argc, char** argv)
{sqlite3* db = NULL;char* errmsg = NULL;int ret = sqlite3_open("./aaa.db", &db);if (SQLITE_OK != ret){// 不能perrorfprintf(stderr, "open db error %s\n", sqlite3_errstr(ret));sqlite3_close(db);return 1;}char sql_cmd[512] ="insert into user3 ""values(NULL,'test',110,datetime('now'));";//因为没有使用回调函数,所以 sql_cmd 只能是除了select 语句之外的其他sql语句ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);if (SQLITE_OK != ret){fprintf(stderr, "exec sql %s error %s\n", sql_cmd, errmsg);sqlite3_free(errmsg);sqlite3_close(db);return 1;}sqlite3_close(db);return 0;
}
http://www.dtcms.com/a/302483.html

相关文章:

  • JVM垃圾收集算法和垃圾收集器
  • 阿里云通义灵码深度解析:AI编程时代的技术革命与实践探索
  • 基于Hadoop3.3.4+Flink1.17.0+FlinkCDC3.0.0+Iceberg1.5.0整合,实现数仓实时同步mysql数据
  • 如何在 Ubuntu 24.04 或 22.04 Linux 上安装和使用 NoMachine
  • python导包机制-更优方式
  • 新华三H3CNE网络工程师认证—Telnet
  • 《 服务注册发现原理:从 Eureka 到 Nacos 的演进》
  • 7、Docker 常用命令大全
  • Python + Requests库爬取动态Ajax分页数据
  • Qt:盒子模型的理解
  • WebSocket双向通信——引入进行功能优化
  • opencv学习(轮廓检测)
  • ACL 访问控制列表全解析:从规则语法到实战配置
  • 旧物回收小程序:科技赋能,让旧物回收焕发生机
  • Avalonia的自定义边框窗口
  • React中为甚么强调props的不可变性
  • TMS320F2812PGFA TI:150MHz工业级DSP控制芯片,电机控制专用
  • 腾讯AI IDE
  • 天学网面试 —— 中级前端开发岗位
  • 动/静态库的原理及制作
  • 测试用例设计常用方法
  • MR-link-2:多效性顺式孟德尔随机化分析!
  • Windows 系统分辨率切换** 与 **Qt4 无边框窗口管理机制** 的交互
  • 2025年7月21–28日AI开发周报:新模型、新战略与开源亮点
  • 全新AI工具小程序源码 全开源
  • 北京-4年功能测试2年空窗-报培训班学测开-第六十二天-模拟未通过,继续准备自我介绍项目介绍面试题中
  • java中一些数据结构的转换
  • C++模板元编程从入门到精通
  • 从“PPT动画”到“丝滑如德芙”——uni-app x 动画性能的“终极奥义”
  • 能源智跃:大模型破壁数据孤岛,铸就智能转型新范式