《Linux网络编程之UDP.pdf》由会员分享,可在线阅读,更多相关《Linux网络编程之UDP.pdf(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、Red Ha
2、t 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,struct sockadd
3、r*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 负责向 to 发送信息,此时在 to 里面
4、存储了收信息方的详细资料 六六 实验步骤实验步骤 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/*/#include#include#include#include#incl
5、ude#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);int main(void)深圳华北工控股份有限公司 -37-int sockfd;struct sock
6、addr_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*)&servaddr,sizeof(servaddr)=-1)perror(bind error);exit(1);do_echo(sockfd,
7、(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#include#include#include#include#include#include#include#define MAXLINE 80 深圳华北工控股份有限公司 -38
8、-#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)perror(connect error);exit(1);while(fgets(sendline,80,fp)!=NULL)write(sockfd,sendline,strlen(sendline);n=rea
9、d(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(usage:udpclientn);exit(1);bzero(&servaddr,sizeof(servaddr);servaddr.sin_family=AF_INET;深圳华北工控股份有限公司 -39-servaddr.sin_port=h
10、tons(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,(struct sockaddr*)&servaddr,sizeof(servaddr);return 0;e)保存文件退出文件编辑模式回到命令行模式,对所编写程序进行编译。gcc o udpclient udpclient.c f)运行的方法有两种,一种是就在本机上
11、先执行 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结束程序。
限制150内