Linux网络编程之UDP

上传人:cl****1 文档编号:571095628 上传时间:2024-08-08 格式:PDF 页数:5 大小:187.03KB
返回 下载 相关 举报
Linux网络编程之UDP_第1页
第1页 / 共5页
Linux网络编程之UDP_第2页
第2页 / 共5页
Linux网络编程之UDP_第3页
第3页 / 共5页
Linux网络编程之UDP_第4页
第4页 / 共5页
Linux网络编程之UDP_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《Linux网络编程之UDP》由会员分享,可在线阅读,更多相关《Linux网络编程之UDP(5页珍藏版)》请在金锄头文库上搜索。

1、深圳华北工控股份有限公司 - 35 - 实验六实验六 Linux 网络编程之网络编程之 UDP 一一 实验目的实验目的 学习和掌握 linux 下的 UDP 通信的基本原理和基本编程方法 二二 实验平台实验平台 基于 ATOM N270,NORCO(华北工控) EMB- 3850 嵌入式开发板 Linux redhat kernel- 2.4 嵌入式操作系统 三三 实验内容实验内容 编写 linux 下 UDP 通信的程序 四四 参考资料参考资料 1、Linux 基础教程.吴学毅.北京交通大学出版社 出版日期:2005 年 9 月 2、红帽企业 Linux 4 X86- 64 体系安装指南 3

2、、Red Hat Enterprise Linux 4 System Administration Guide 4、TCP/IP 详解 5、Linux 中 TCP/IP 协议实现及嵌入式应用.张曦煌,北京航空航天大学出版社.出版时间:2008L 五五 实验原理实验原理 UDP 协议是建立在 IP 协议基础之上的,用在传输层的协议。UDP 与TCP 的不同在于它是不可靠的数据报服务,只是简单地对信息进行接收而不对接收到的信息的正确性进行检查。其常用的两个函数如下: int recvfrom(int sockfd,void *buf,int len,unsigned int flags, stru

3、ct sockaddr * from int *fromlen) int sendto(int sockfd,const void *msg,int len,unsigned int flags,struct sockaddr *to int tolen) sockfd,buf,len 的意义和 read,write 一样,分别表示套接字描述符,发送或接收的缓冲区及大小。 recvfrom 负责从 sockfd 接收数据,如果 from 不是 NULL,那么在 from 里面存储了信息来源的情况, 如果对信息的来源不感兴趣可以将 from 和fromlen 设置为 NULL。sendto 负责

4、向 to 发送信息,此时在 to 里面存储了收信息方的详细资料 六六 实验步骤实验步骤 a) 登录进入 linux 操作系统,打开命令窗口进入 myprojects 文件夹,新深圳华北工控股份有限公司 - 36 - 建一文件夹取名为 udp 令如下: cd /myprojects mkdir udp b) 进入 udp 文件夹,新建文件 udp.c,并在其中输入以下代码: cd udp /进入文件夹 vi udp.c /新建文件 udp.c /*udp.c*/ /*This is UDP Server code /*Author: manchen /*Date: 2009- 8- 16 /*/

5、 #include #include #include #include #include #include #define MAXLINE 80 #define SERV_PORT 8888 void do_echo(int sockfd,struct sockaddr *pcliaddr,socklen_t clilen) int n; socklen_t len; char mesg80; for(;) len=clilen; n=recvfrom(sockfd,mesg,80,0,pcliaddr,&len); sendto(sockfd,mesg,n,0,pcliaddr,len);

6、 int main(void) 深圳华北工控股份有限公司 - 37 - int sockfd; struct sockaddr_in servaddr,cliaddr; sockfd=socket(AF_INET,SOCK_DGRAM,0); bzero(&servaddr,sizeof(servaddr); servaddr.sin_family=AF_INET; servaddr.sin_addr.s_addr=htonl(INADDR_ANY); servaddr.sin_port=htons(8888); if(bind(sockfd,(struct sockaddr*)&servad

7、dr,sizeof(servaddr)=-1) perror(bind error); exit(1); do_echo(sockfd,(struct sockaddr *)&cliaddr,sizeof( cliaddr); return 0; c) 保存文件退出文件编辑模式回到命令行模式,对所编写程序进行编译 gcc o udp udp.c d) 新建文件 udpclient.c,输入以下代码: /*udpclient.c*/ /*This is UDP Client code /*Author: manchen /*Date: 2009- 8- 16 /*/ #include #incl

8、ude #include #include #include #include #include #include #define MAXLINE 80 深圳华北工控股份有限公司 - 38 - #define SERV_PORT 8888 void do_cli(FILE *fp,int sockfd,struct sockaddr *pservaddr,socklen_t servlen) int n; char sendline80,recvline80+1; if(connect(sockfd,(struct sockaddr *)pservaddr,servlen)=- 1) perr

9、or(connect error); exit(1); while(fgets(sendline,80,fp)!=NULL) write(sockfd,sendline,strlen(sendline); n=read(sockfd,recvline,80); if(n=- 1) perror(read error); exit(1); recvlinen=0; fputs(recvline,stdout); int main(int argc,char *argv) int sockfd; struct sockaddr_in servaddr; if(argc!=2) printf(usa

10、ge:udpclientn); exit(1); bzero(&servaddr,sizeof(servaddr); servaddr.sin_family=AF_INET; 深圳华北工控股份有限公司 - 39 - servaddr.sin_port=htons(8888); if(inet_pton(AF_INET,argv1,&servaddr.sin_addr)=0) printf(%sis not a valid IPaddressn,argv1); exit(1); sockfd=socket(AF_INET,SOCK_DGRAM,0); do_cli(stdin,sockfd,(s

11、truct sockaddr *)&servaddr,sizeof(servaddr); return 0; e) 保存文件退出文件编辑模式回到命令行模式,对所编写程序进行编译。 gcc o udpclient udpclient.c f) 运行的方法有两种,一种是就在本机上先执行 udp 可执行程序,再执行 udpclient 程序。另一种方法是利用交叉线连接两台 NORCO 工作平台,在一台上先执行 udp 程序,另一台机子上执行 udpclient 程序。 执行的命令如下: ./udp & ./udpclient 127.0.0.1 /当采用两机互联时将 IP 地址改为对方 IP 即可 执行结果如下: Hello /手动输入 Hello /udp 显示 Welcome to Intel&NORCO platform /手动输入 Welcome to Intel&NORCO platform /udp 显示 在执行过程中,可以利用 netstat ln 来观察绑定的端口号,如果 udp 服务器已经执行, 当我们再次重复执行时会报错 bind error: Address already in use,如果未启动服务器程序直接运行客户端程序则会报错 read error:Connection refused,在正常执行过程中可以通过 Ctrl+d 或者 Ctrl+c结束程序。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号