请教抓数据包问题
struct sockaddr_in addr;
len=sizeof(addr);
r = recvfrom(sock,(char *)buf,sizeof(buf), 0, (struct sockaddr *)&addr,&len);
这样子收到的是一个完整的数据包,
假如我希望只往buf中放数据包的首部,比如54字节,应该如何处理?
谢谢~~~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
复制代码
这是以前黄山松写的。转过来给你看看应该有帮助。
呵呵,先谢过再看~~~~
:)
这些功能基本都已经实现,还有两个问题:
1: r = recvfrom(sock,p_map,54, 0, (struct sockaddr *)&addr,&len);
这样是否可以实现只向p_map 中存放每个数据包的前54字节的数据?
2: for (;
{r = recvfrom(sock,(p_map+i),54, 0, (struct sockaddr *)&addr,&len);
i = i + 54;
}
这样是否可以实现每次在p_map中依次存放54字节的数据,而不会覆盖上次存放的数据?
多谢~~
:)
1.应该可以.
第2个我不懂你为什么要这么做.
其实收下来个数据包 无论多大.你都可以直接取它的前54字节.何必像你上面的代码那样做.
谢谢版主`~~~
主要是我想实现这样的功能:主进程只负责抓包,放到一个共享内存中; 子进程只负责处理共享内存中的数据包。
如果不让p_map+i,就会覆盖原来收到的数据包。
才开始解除linux下的编程,很多地方都不太懂,请版主多多指教,呵呵:)
可以这样做。需要你自己处理。
就是收到的数据包的首部放进buf中,而把数据部分丢弃。
可以这样做吗?还是必须保存一个完整的数据包?
>>假如我希望只往buf中放数据包的首部,比如54字节,应该如何处理?
这句话什么意思?
请高手们指导下啊,急啊.......