Linux系统程序设计教程(第2版) 电子教案28-套接字相关函数_第1页
Linux系统程序设计教程(第2版) 电子教案28-套接字相关函数_第2页
Linux系统程序设计教程(第2版) 电子教案28-套接字相关函数_第3页
Linux系统程序设计教程(第2版) 电子教案28-套接字相关函数_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

教案第28次课2学时课题套接字编程教学目的与要求掌握面向连接、面向无连接套接字编程流程掌握面向连接、面向无连接套接字编程相关函数重点难点重点:网络编程相关函数难点:网络编程相关函数教学进程安排一、复习旧课,引入新课提问:什么是套接字?有几种类型?提问:面向无连接、面向链接通信流程?传输层协议是什么?(找两名同学到黑板来画这两个流程图)教师总结,复习。引入:知道了网络编程的流程,如何编程实现?函数都是什么?本节课来讲解本门课程最后的知识点——相关函数。(5分钟)二、实施本次课教学内容(知识点明确、突出重/难点、案例和课堂实践环节的设计等)板书:第11章网络编程本节课的内容采取边编程、边介绍函数的方式来进行。现在/home/下创建ch11目录,并在ch11目录下创建两个文件,分别为server.c和client.c。1)面向连接的套接字通信流程按照流程图进行分段编程。A:介绍socket函数(10分钟)#include<sys/socket.h>--------------------------------------------------------//变量定义部分 intsockfd;--------------------------------------------------------//代码部分sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd==-1){ perror("socket"); exit(1);}B:介绍bind函数(15分钟)添加如下代码:#include<arpa/inet.h>------------------------------------------------------------------- structsockaddr_inmy_addr; intSERVPORT=3333,val=1;-------------------------------------------------------------------- //避免出现地址已经使用的错误 setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(char*)&val,sizeof(val));my_addr.sin_family=AF_INET; //协议族my_addr.sin_port=htons(SERVPORT);//端口my_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//IP地址bzero(&(my_addr.sin_zero),8);//填充0if(bind(sockfd,(structsockaddr*)&my_addr,sizeof(structsockaddr))==-1){perror("bind");exit(1);}C:讲解listen函数。(10分钟)添加如下代码:intbacklog=10;----------------------------- if(listen(sockfd,backlog)==-1){perror("listen");exit(1);}D:讲解accept函数,添加如下代码:(10分钟) intclient_fd; structsockaddr_inremote_addr; intsin_size;------------------------------------------

sin_size=sizeof(structsockaddr_in);if((client_fd=accept(sockfd,(structsockaddr*)&remote_addr,&sin_size))==-1){perror("accept");exit(1);}E:讲解recv、send函数,添加如下代码:(10分钟) //输出客户端地址,字符串形式 printf("receivedaconnectionfrom%s\n",inet_ntoa(remote_addr.sin_addr)); //向客户端发送欢迎信息 if(send(client_fd,"Hello,youareconnected!\n",26,0)==-1){perror("send");close(client_fd);exit(2);}F:讲解close函数,添加如下代码:close(client_fd); close(sockfd);至此,server.c程序编写好。接下来,采用同样的方式编写client.c文件。A:讲解connect函数,编写如下代码:(15分钟)#include<arpa/inet.h>#include<sys/socket.h>intsockfd;---------------------------------------- sockfd=socket(AF_INET,SOCK_STREAM,0); if(fd==-1) { perror("socket"); exit(1); } #defineSERVPORT3333//与服务器同------------------------------------- structsockaddr_inserv_addr;----------------------------------------//设置服务器地址结构体serv_addr.sin_family=AF_INET;serv_addr.sin_port=htons(SERVPORT);serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");bzero(&(serv_addr.sin_zero),8);//向服务器发起连接if(connect(sockfd,(structsockaddr*)&serv_addr,sizeof(structsockaddr))==-1){perror("connect");exit(1);}再添加接收部分函数,(10分钟)charbuf[100];intrecvbytes;---------------------------------------- //接收服务器端信息并显示if((recvbytes=recv(sockfd,buf,100,0))==-1){perror("recv");exit(1);}buf[recvbytes]='\0';//设置字符串结尾printf("Received:%s",buf);close(sockfd);将server.c和client.c进行编译,运行,观察结果。2)面向无连接的套接字流程再次讲解流程和相关函数,由于相对上面程序较简单,所以不在课堂上带着编程,课后自己完成。三、课程小结(5分钟)提问:两个流程教师总结课后学习任务布置课后任务:1课下完成五级项目《基于TCP的基本网络通信》《基于TCP的重复性服务器》《基于UDP的基本网络通信》2作业1.什么是信号?说明产生信号的几种方式以及进程对信号的处理方式。2.编写程序处理SIGINT信号,当程序接收到SIG

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论