Linux程序设计 -第六章-Linux网络程序设计.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
. /*first step in udp programming*/ #include sys/types.h #include sys/socket.h #include arpa/inet.h #include stdio.h #define BUFLEN 255 int main(int argc,char **argv) { struct sockaddr_in peeraddr,localaddr; int sockfd; char recmsg[BUFLEN+1]; int socklen,n; if(argc!=5){ printf(%s dest IPaddress dest port source IPaddress source port\n,argv[0]); exit(0); } sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd0){ fprintf(stderr,socket creating error in udptalk.c!\n); exit(1); } socklen=sizeof(struct sockaddr_in); memset(peeraddr,0,socklen); peeraddr.sin_family=AF_INET; peeraddr.sin_port=htons(atoi(argv[2])); if(inet_pton(AF_INET,argv[1],peeraddr.sin_addr)=0){ printf(Wrong dest IP address!\n); exit(0); } memset(localaddr,0,socklen); localaddr.sin_family=AF_INET; localaddr.sin_port=htons(atoi(argv[4])); if(inet_pton(AF_INET,argv[3],localaddr.sin_addr)=0){ printf(Wrong source IP address!\n); exit(0); } if(bind(sockfd,localaddr,socklen)0){ fprintf(stderr,bind local address error in udptalk.c!\n); exit(2); } if(fgets(recmsg,BUFLEN,stdin)==NULL) exit(0); if(sendto(sockfd,recmsg,strlen(recmsg),0,peeraddr,socklen)0){ fprintf(stderr,sendto error in udptalk.c!\n); perror(); exit(3); } for(;;){ n=recvfrom(sockfd,recmsg,BUFLEN,0,peeraddr,socklen); if(n0){ fprintf(stderr,recvfrom error in udptalk.c\n); perror(); exit(4); } else{ recmsg[n]=0; printf(peer: %s,recmsg); } if(fgets(recmsg,BUFLEN,stdin)==NULL) exit(0); if(sendto(sockfd,recmsg,strlen(recmsg),0,peeraddr,socklen)0){ fprintf(stderr,sendto error in udptalk.c!\n); perror(); exit(3); } } } 对第一个UDP例程的思考 思考: 1. 只有来自对方IP和端口号的数据报才予以处理,如何过滤掉其它数据报? 2. 双方发送和接收交替进行,只要有一方发出数据报,对方阻塞的状态就能消除。如果一个数据报丢失,通信双方都在recvfrom中阻塞,永远等待。超时机制的设置? 对第一个UDP例程的思考 解决第一个问题: 接收数据后,加入对数据报地址的检验: if(memcmp(recvaddr,perraddr,socklen)!=0) continue; 这样就将来自其他地址的数据报拒之门外了。 对第一个UDP例程的思考 解决第二个问题: 前面提到的sock选项SO_RCVTIMEO就可以完成阻塞超时的设置。 在程序中加入: # include sys/time.h Struct

文档评论(0)

浪漫唯美-文档菜鸟 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档