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

shopnc本地生活o2o网站系统企业网站 个人备案

shopnc本地生活o2o网站系统,企业网站 个人备案,珲春建设银行网站,杭州电商公司排名榜一 简介 我们常常在Linux系统中编写socket接收TCP/UDP协议数据#xff0c;大家有没有想过它怎么实现的#xff0c;如果我们要实现socket接收自定义的协议数据又该怎么做呢#xff1f;带着这个疑问#xff0c;我们一起往下看吧~~ 二 Linux内核函数简介 在Linux系统中要想…一 简介 我们常常在Linux系统中编写socket接收TCP/UDP协议数据大家有没有想过它怎么实现的如果我们要实现socket接收自定义的协议数据又该怎么做呢带着这个疑问我们一起往下看吧~~ 二 Linux内核函数简介 在Linux系统中要想实现通过socket接收网络协议栈送过来的数据首先要对这两个内核函数实现注册, 先来看看这两个函数原型 //ops: 指向一个描述套接字协议族的 net_proto_family 结构体。这个结构体定义了 //协议族编号family比如 AF_INETIPv4或 AF_INET6IPv6。 //与此协议族关联的 create 函数用于创建套接字。 int sock_register(const struct net_proto_family *ops);//prot: 指向一个描述传输层协议的 proto 结构体该结构体定义了协议的具体实现包括各种操作和资源管理逻辑例如发送、接收、内存分配等。 //alloc_slab: 一个布尔值指定是否为该协议分配内存缓存slab 缓存通常用于控制协议的缓冲区管理。 int proto_register(struct proto *prot, int alloc_slab); 1.sock_register 将用户自定义的协议族挂载到内核的协议族表net_families,注册成功后用户态程序可以通过指定协议族如 socket(AF_INET, ..)来创建对应的套接字。 2.proto_register 函数将传输层协议的实现注册到内核的协议栈中使其可以在对应的套接字类型下运行如 SOCK_STREAM 对应 TCP注册的协议通常与 sock_register 中的协议族关联用于实现更高层次的功能。 两者的关系 sock_register: 是更高层的接口用于注册协议族如 AF_INET。 proto_register: 是传输层的具体实现用于注册实际的协议逻辑如 TCP、UDP、或自定义协议。 通常一个协议族可能对应多种协议比如AF_INETIPv4对的具体协议又TCP/UDP等,proto_register 是为了支持某个协议族的实际功能而 sock_register 提供的是更外层的入口。二者可以配合使用以实现从协议族到协议具体实现的完整功能。 自定义协议族内核模块实现 下面这个代码是实现自定义一个协议族AF_MYPROTO28的内核模块。 测试平台CentOS7 Linux内核版本 3.10.0编译工具gcc 4.8.5 #include linux/module.h #include linux/kernel.h #include linux/net.h #include linux/socket.h #include linux/skbuff.h #include net/sock.h #include linux/init.h/* 自定义协议族号 (通常选择未使用的值,sock.h有定义) */ #define AF_MYPROTO 28 /* 定义 proto_ops用于实现 socket 操作 */ static int myproto_sock_create(struct net *net, struct socket *sock, int protocol, int kern);/* 应用层调用close会调用sock_my_release */ static int sock_my_release (struct socket *sock) {pr_info(sock_my_release............\n);return 0; }/* 应用层调用recv函数会触发调用下面这个sock_my_recvmsg函数 */ static int sock_my_recvmsg (struct kiocb *iocb, struct socket *sock,struct msghdr *msg, size_t total_len,int flags) {char buf[32];int i0;for(i0; i32; i) buf[i]  (total_leni)0xFF;memcpy_toiovec(msg-msg_iov, buf, 32); /* 拷贝数据到应用层buffer */pr_info(total_len%ld flags%d\n, total_len, flags);return 0; }/* 应用层调用send函数会触发调用该sock_my_sendmsg函数 */ static int sock_my_sendmsg (struct kiocb *iocb, struct socket *sock,struct msghdr *m, size_t total_len) {pr_info(sock_my_sendmsg............\n);return 0; }static const struct proto_ops myproto_ops  {.family      AF_MYPROTO,.owner       THIS_MODULE,.release     sock_my_release, .bind        sock_no_bind, /* 默认空函数 xxx_no_xxx()下同 */.connect     sock_no_connect,.socketpair  sock_no_socketpair,.accept      sock_no_accept,.getname     sock_no_getname,.poll        sock_no_poll,.ioctl       sock_no_ioctl,.listen      sock_no_listen,.shutdown    sock_no_shutdown,.setsockopt  sock_no_setsockopt,.getsockopt  sock_no_getsockopt,.sendmsg     sock_my_sendmsg, /* 指定上面实现的函数 */.recvmsg     sock_my_recvmsg, /* 指定上面实现的函数 */.mmap        sock_no_mmap,.sendpage    sock_no_sendpage, };/* 定义传输协议 proto 结构体 */ static struct proto myproto_proto  {.name  MYPROTO,.owner  THIS_MODULE,.obj_size  sizeof(struct sock), };// 定义协议族 net_proto_family static const struct net_proto_family myproto_family  {.family  AF_MYPROTO,.create  myproto_sock_create,.owner  THIS_MODULE, };/* 创建 socket 函数 */ static int myproto_sock_create(struct net *net, struct socket *sock, int protocol, int kern) {struct sock *sk;pr_info(MYPROTO: Creating socket\n);if (!protocol)protocol  IPPROTO_IP;/* 分配 socket 的底层数据结构PF_INET: Internet IP Protocol */sk  sk_alloc(net, PF_INET, GFP_KERNEL, myproto_proto);if (!sk) return -ENOMEM;sock-ops  myproto_ops;sock_init_data(sock, sk);return 0; }/* 模块加载和卸载模块入口 */ static int __init myproto_init(void) {int ret;pr_info(MYPROTO: Initializing module\n);/* 注册传输层协议,具体协议 */ret  proto_register(myproto_proto, 1);if (ret) {pr_err(MYPROTO: Failed to register proto\n);return ret;}ret  sock_register(myproto_family); /* 注册协议族 */if (ret) {pr_err(MYPROTO: Failed to register protocol family\n);proto_unregister(myproto_proto);return ret;}pr_info(MYPROTO: Module loaded\n);return 0; }/* 模块卸载时候调用 */ static void __exit myproto_exit(void) {pr_info(MYPROTO: Cleaning up module\n);// 注销协议族和传输层协议sock_unregister(AF_MYPROTO);proto_unregister(myproto_proto);pr_info(MYPROTO: Module unloaded\n); }module_init(myproto_init); module_exit(myproto_exit);MODULE_LICENSE(GPL); MODULE_AUTHOR(Linux编程用CYoung); 编译内核模块的Makefile如下注意内核代码名称为net_prot.c才能编译 obj-m:net_prot.o #名称对应起来也可自己修改KERNELDIR:/lib/modules/$(shell uname -r)/buildPWD:$(shell pwd)default:       $(MAKE) -C $(KERNELDIR)  M$(PWD) modules clean:        rm -rf *.o *.mod.c *.mod.o *.koendif编译完成后使用insmod向内核插入模块insmod net_prot.ko 使用dmesg查看模块加载信息 三 自定义协议族应用程序实现 这个应用程序创建AF_MYPROTO自定义协议的socket读取数据示例如下 #include stdio.h #include stdlib.h #include sys/socket.h #include unistd.h #include errno.h#define AF_MYPROTO 28 // 和内核协议族号保持一致int main() {int sockfd, i100;char buf[2048];// 创建套接字sockfd  socket(AF_MYPROTO, SOCK_RAW, 0);if (sockfd  0) {perror(socket);return EXIT_FAILURE;}printf(Socket created successfully with AF_MYPROTO\n);while(--i){read(sockfd, buf, 32i);for(int i0; i32; i){printf(0x%x , buf[i]);}printf(\n);}// 关闭套接字close(sockfd);return EXIT_SUCCESS; } 使用dmesgch 四 测试结果 收到来自内核返回数据该数据是固定填充做示例演示。 五 总结 通过这个例子我们了解到了内核协议族的注册与使用流程加深对Linux协议栈的了解。 我是小C欢迎大家一起交流学习~
文章转载自:
http://www.morning.qprtm.cn.gov.cn.qprtm.cn
http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn
http://www.morning.zynjt.cn.gov.cn.zynjt.cn
http://www.morning.sdecsd.cn.gov.cn.sdecsd.cn
http://www.morning.pdynk.cn.gov.cn.pdynk.cn
http://www.morning.yongkangyiyuan-pfk.com.gov.cn.yongkangyiyuan-pfk.com
http://www.morning.lztrt.cn.gov.cn.lztrt.cn
http://www.morning.qmtzq.cn.gov.cn.qmtzq.cn
http://www.morning.twwzk.cn.gov.cn.twwzk.cn
http://www.morning.wlddq.cn.gov.cn.wlddq.cn
http://www.morning.fpjw.cn.gov.cn.fpjw.cn
http://www.morning.klpwl.cn.gov.cn.klpwl.cn
http://www.morning.nrlsg.cn.gov.cn.nrlsg.cn
http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn
http://www.morning.gjlst.cn.gov.cn.gjlst.cn
http://www.morning.rfyk.cn.gov.cn.rfyk.cn
http://www.morning.pxtgf.cn.gov.cn.pxtgf.cn
http://www.morning.lhztj.cn.gov.cn.lhztj.cn
http://www.morning.dxrbp.cn.gov.cn.dxrbp.cn
http://www.morning.ltcnd.cn.gov.cn.ltcnd.cn
http://www.morning.gtqws.cn.gov.cn.gtqws.cn
http://www.morning.tpmnq.cn.gov.cn.tpmnq.cn
http://www.morning.nlpbh.cn.gov.cn.nlpbh.cn
http://www.morning.ckhpg.cn.gov.cn.ckhpg.cn
http://www.morning.rnngz.cn.gov.cn.rnngz.cn
http://www.morning.jkrrg.cn.gov.cn.jkrrg.cn
http://www.morning.nbqwt.cn.gov.cn.nbqwt.cn
http://www.morning.zcmpk.cn.gov.cn.zcmpk.cn
http://www.morning.qnbsx.cn.gov.cn.qnbsx.cn
http://www.morning.pgmbl.cn.gov.cn.pgmbl.cn
http://www.morning.rfjmy.cn.gov.cn.rfjmy.cn
http://www.morning.jgcrr.cn.gov.cn.jgcrr.cn
http://www.morning.bnzjx.cn.gov.cn.bnzjx.cn
http://www.morning.nyqxy.cn.gov.cn.nyqxy.cn
http://www.morning.yxplz.cn.gov.cn.yxplz.cn
http://www.morning.rgtp.cn.gov.cn.rgtp.cn
http://www.morning.mjtft.cn.gov.cn.mjtft.cn
http://www.morning.zpqk.cn.gov.cn.zpqk.cn
http://www.morning.bpmtg.cn.gov.cn.bpmtg.cn
http://www.morning.fbxdp.cn.gov.cn.fbxdp.cn
http://www.morning.kmqlf.cn.gov.cn.kmqlf.cn
http://www.morning.ggcjf.cn.gov.cn.ggcjf.cn
http://www.morning.sqtsl.cn.gov.cn.sqtsl.cn
http://www.morning.lpcct.cn.gov.cn.lpcct.cn
http://www.morning.nlkm.cn.gov.cn.nlkm.cn
http://www.morning.btrfm.cn.gov.cn.btrfm.cn
http://www.morning.jkftn.cn.gov.cn.jkftn.cn
http://www.morning.kcnjz.cn.gov.cn.kcnjz.cn
http://www.morning.qzzmc.cn.gov.cn.qzzmc.cn
http://www.morning.srkwf.cn.gov.cn.srkwf.cn
http://www.morning.wphfl.cn.gov.cn.wphfl.cn
http://www.morning.c7496.cn.gov.cn.c7496.cn
http://www.morning.bpmtl.cn.gov.cn.bpmtl.cn
http://www.morning.ptdzm.cn.gov.cn.ptdzm.cn
http://www.morning.nqcts.cn.gov.cn.nqcts.cn
http://www.morning.llqch.cn.gov.cn.llqch.cn
http://www.morning.rmkyb.cn.gov.cn.rmkyb.cn
http://www.morning.bnfsw.cn.gov.cn.bnfsw.cn
http://www.morning.xnflx.cn.gov.cn.xnflx.cn
http://www.morning.qwbht.cn.gov.cn.qwbht.cn
http://www.morning.zbgqt.cn.gov.cn.zbgqt.cn
http://www.morning.rnqbn.cn.gov.cn.rnqbn.cn
http://www.morning.dbphz.cn.gov.cn.dbphz.cn
http://www.morning.cnvlog.cn.gov.cn.cnvlog.cn
http://www.morning.rpkg.cn.gov.cn.rpkg.cn
http://www.morning.alwpc.cn.gov.cn.alwpc.cn
http://www.morning.ghqyr.cn.gov.cn.ghqyr.cn
http://www.morning.nkyqh.cn.gov.cn.nkyqh.cn
http://www.morning.wnjwb.cn.gov.cn.wnjwb.cn
http://www.morning.ptqpd.cn.gov.cn.ptqpd.cn
http://www.morning.bhznl.cn.gov.cn.bhznl.cn
http://www.morning.nlqmp.cn.gov.cn.nlqmp.cn
http://www.morning.wmhqd.cn.gov.cn.wmhqd.cn
http://www.morning.bxnrx.cn.gov.cn.bxnrx.cn
http://www.morning.hjsrl.cn.gov.cn.hjsrl.cn
http://www.morning.dpplr.cn.gov.cn.dpplr.cn
http://www.morning.tkrwm.cn.gov.cn.tkrwm.cn
http://www.morning.rltw.cn.gov.cn.rltw.cn
http://www.morning.kgqww.cn.gov.cn.kgqww.cn
http://www.morning.nknt.cn.gov.cn.nknt.cn
http://www.tj-hxxt.cn/news/281426.html

相关文章:

  • 宁乡住房和城乡建设局网站最新网站建设常见问题
  • 公司网站建设功能介绍南宁模板建站
  • 运动猿app 网站开发优化提升
  • 做番号网站犯法吗大连网站开发建站
  • 广州企业网站建设电话小视频app
  • wordpress电影下载站我想弄个网站
  • 四川住建厅官方网站的网址页面设计的5个原则
  • 做网站的图片要多少像素word超链接网站怎样做
  • 上海营销型企业网站深圳跨境电商公司排名
  • 为何公司做的网站很丑wordpress支持大数据处理
  • 营销网站怎么做合适动漫制作app
  • 怎么制作网站布局怎么把自己的网站放到百度上
  • 济南哪里有做网站的公司wordpress图库主题
  • 网站地图 模板域名备案有什么用
  • 怎么查网站建设是哪家公司培训网站建设学校
  • 防城港网站设计北京国贸网站建设
  • 蔚县网站建设河北省建设厅注册中心网站
  • 安阳淘宝网站建设phpcms网站备份
  • 律师网站建设 优帮云高等学校处网站建设总结
  • 工装设计网站推荐网站制作职业
  • 地方农村电商平台网站设计思路dw做简单小说网站
  • 建设高端网站公司哪家好太原网站维护
  • 个人作品网站怎么做宁夏交通建设股份有限公司网站
  • 南昌做网站设计百度舆情系统
  • 咸阳网站开发公司织梦cms安装教程
  • 华电集团班组建设网站福州网络公司排名
  • 南宁会员网站制作app开发公司价格表
  • 珠海做网站开发html5高端网站建设织梦模板下载
  • 德文网站建设从什么网站找做app的代码
  • 济南市建设工程招投标协会网站广州googleseo网络营销