raw协议网络编程(完整程序和注释)

raw协议网络编程(完整程序和注释)

ID:1222705

大小:38.50 KB

页数:4页

时间:2017-11-08

raw协议网络编程(完整程序和注释)_第1页
raw协议网络编程(完整程序和注释)_第2页
raw协议网络编程(完整程序和注释)_第3页
raw协议网络编程(完整程序和注释)_第4页
资源描述:

《raw协议网络编程(完整程序和注释)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、又用了一天,这次写好了,程序依然使用服务器/客户机模式,因此分为服务器程序部分和客户机部分,另外上次写的是面向连接的TCP协议模式,这次我换了一个尝试,使用面向非连接的UDP模式,程序和详细注释如下服务器程序serve.c用于发送数据,由于面向非连接,所以它只管发送,发送完了就结束,收没收到它不管#include#include#include#include#include#include

2、/in.h>#include#include#include头文件#defineMYPORT4950端口号intmain(intargc,char*argv[])主程序两个参数分别为目标的ip地址,发送的数据{intsockfd;structhostent*he;structsockaddr_intheir_addr;intnumbytes;if(argc!=3)检查参数是否正确,如果输入参数不对,也就别继续了{fprintf(stder

3、r,"usage:clienthostnamemessage");exit(1);}printf("0");if((he=gethostbyname(argv[1]))==NULL)这里用到了gethostbyname函数,返回一个指向填充好的数据结构hostent的指针,下面在给附地址值时候会用到这个指针{herror("gethostbyname");exit(1);}printf("1");下面开始调用socket来获得套接口if((sockfd=socket(AF_INET,SOCK_R

4、AW,IPPROTO_UDP))==-1)注意这里的参数分别代表支持ipv4协议raw的原始套接口protocol选项为IPPROTO_UDP类型,这个很重要,内核根据这个参数包装数据的ip头{perror("socket");exit(1);}printf("2");获得了套接口后开始初始化their_addr.sin_family=AF_INET;their_addr.sin_port=htons(MYPORT);their_addr.sin_addr=*((structin_addr*)he->h

5、_addr);bzero(&(their_addr.sin_zero),8);printf("3");printf("%s",argv[2]);由于是面向无连接的通信,有了套接口后就直接发送,目标的ip和发送数据现在都已经知道了numbytes=sendto(sockfd,argv[2],strlen(argv[2]),0,(structsockaddr*)&their_addr,sizeof(structsockaddr));printf("4");输出发送情况printf("sent%dby

6、testo%s",numbytes,inet_ntoa(their_addr.sin_addr));close(sockfd);return0;}以上就是发送的程序,这里由于没有设置ip_HDRINCL选项,所以内核负责填充ip头并完成校验和的计算,发送程序只负责传输待发送的数据就好,如果你想自己构造ip头的话那就得设置ip_HDRINCL了,将其flag项置1下面是接收端client.c程序,同样必须采用原始套接字接口内核才会把收到的RAW数据传递给你这个接口#include#inc

7、lude#include#include#include#include#include#include头文件#defineMYPORT4950端口号#definemaxbuflen100最大接受数据下面是主程序main(){intsockfd;structsockaddr_inmy_addr;structsockaddr_intheir_add

8、r;intaddr_len,numbytes;charbuf[maxbuflen];前面声明一些结构体,这个在之前的编程中也有,一样的开始建立RAW套接口,这里的protocol选项必须与之前的一致,不然那边包装好的数据与这个接口就不符合了if((sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_UDP))==-1){perror("socket");exit(1);}printf("

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。