栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从Linux内核发送UDP数据包

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从Linux内核发送UDP数据包

几个月前我解决了我的问题。这是我使用的解决方案。

标准的包发送API(sock_create,connect等)不能在少数情况下使用(中断)。在错误的地方使用它会导致KP。

netpoll API更“底层”,并且可以在每种情况下使用。但是,有几个条件:

  • 以太网设备
  • IP网络
  • 仅UDP(无TCP)
  • 用于发送和接收数据包的不同计算机(您不能自己发送。)

确保尊重他们,因为如果出现问题,您将不会收到任何错误消息。它只会默默地失败:)这是一些代码。

宣言

#include <linux/netpoll.h>#define MESSAGE_SIZE 1024#define INADDR_LOCAL ((unsigned long int)0xc0a80a54) //192.168.10.84#define INADDR_SEND ((unsigned long int)0xc0a80a55) //192.168.10.85static struct netpoll* np = NULL;static struct netpoll np_t;

初始化

np_t.name = "LRNG";strlcpy(np_t.dev_name, "eth0", IFNAMSIZ);np_t.local_ip = htonl(INADDR_LOCAL);np_t.remote_ip = htonl(INADDR_SEND);np_t.local_port = 6665;np_t.remote_port = 6666;memset(np_t.remote_mac, 0xff, ETH_ALEN);netpoll_print_options(&np_t);netpoll_setup(&np_t);np = &np_t;

采用

char message[MESSAGE_SIZE];sprintf(message,"%dn",42);int len = strlen(message);netpoll_send_udp(np,message,len);

希望它可以帮助某人。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/408681.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号