通信软件设计方法杨雄编著二零零九年四月成都信息工程学院1讲授内容1)LINUX概况2)LINUX下C语言程序编译和调试2.1)LINUX开发环境学习(实验)3)通信系统和通信软件4)基于TCP-IP的主机到主机通信软件示例4.1)SOCKET程序设计(实验)5)无状态通信协议程序设计6)LINUX内核程序设计7)低层232接口通信程序设计8)设计一个简单链路层以及程序8.1)IP软件和链路层软件设计(实验)成都信息工程学院2本章重点问题如何编写C语言程序如何在TCP上传输数据成都信息工程学院3LINUX下的HELLO程序第四讲基于TCP-SOCKET的通信程序成都信息工程学院4LINUX操作系统Hello!李阳第四讲基于TCP-SOCKET的通信程序成都信息工程学院5本地文件拷贝程序第四讲基于TCP-SOCKET的通信程序成都信息工程学院6文件拷贝实例文件系统的多级树状目录结构/binsbinetchomeusrlibdevetcliblocal…binetclib…成都信息工程学院7文件拷贝实例示例3--将文件A拷贝到目录/home/zhongshan下/binsbinetchomeusrlibdevliyangAzhongshanA成都信息工程学院8文件拷贝实例示例3-将文件A拷贝到目录/home/zhongshan下AA内存buffer成都信息工程学院9打开文件A生成文件/home/zhongshan/A读取文件A的N个字节放入s_buffer实际读取字节数放入s_lens_len==0?将s_buffer的s_len字节写入/home/zhongshan/A开始结束关闭所有文件main(){#defineN2048ints_fd,r_fd;ints_len;chars_buffer[N];s_fd=open(“/home/liyang/A”,O_RDWR);r_fd=open(“/home/zhongshan/A”,O_RDWR|O_CREAT);wihile((s_len=read(s_fd,1,N,s_buffer))!=0){r=write(r_fd,1,s_len,s_buffer);if(r!=1){log_error(“…”);break;}}close(s_fd);close(r_fd);}文件拷贝实例YN示例3-将文件A拷贝到目录/home/zhongshan下成都信息工程学院10文件拷贝实例N为每次读取的字节数也是缓冲区的大小(字节)s_fd是源文件的文件描述字r_fd是目标文件的文件描述字s_buffer是内存缓冲区分别打开和生成文件循环读取源文件每次读取一块,然后写入目标文件直到源文件读取完毕出现错误要日志关闭文件main(){#defineN2048ints_fd,r_fd;ints_len;chars_buffer[N];s_fd=open(“/home/liyang/A”,O_RDWR);r_fd=open(“/home/zhongshan/A”,O_RDWR|O_CREAT);wihile((s_len=read(s_fd,1,N,s_buffer))!=0){r=write(r_fd,1,s_len,s_buffer);if(r!=1){log_error(“…”);break;}}close(s_fd);close(r_fd);}成都信息工程学院11主机到主机的文件拷贝程序第四讲基于TCP-SOCKET的通信程序成都信息工程学院12•主机到主机的通信软件–主机之间的文件拷贝需求–TCP协议分层结构–TCP上进程通信模式–TCP-SOCKET函数–主机之间文件拷贝示例程序第四讲基于TCP-SOCKET的通信程序成都信息工程学院13文件传送实例将主机A的文件A拷贝到主机B的目录/home/zhongshan下homeliyangAABhomezhongshanA传输网传输介质接口接口对文件系统编程对接口编程成都信息工程学院14•主机到主机的通信软件–主机之间的文件拷贝–TCP协议分层结构–TCP上进程通信模式–TCP-SOCKET函数–主机之间文件拷贝示例程序第四讲基于TCP-SOCKET的通信程序成都信息工程学院15通信网络体系分层ISO的分层OSI参考模型层典型执行方式名称主要功能举例7软件应用层网络界面和用户应用Email6软件表示层数据格式及转换NFS5软件会晤层对话和同步管理检查点协议4软件/硬件传输层端到端传输协议UDP,TCP3软件/硬件网络层目的地址寻找和传送IP2硬件/软件数据链路层点到点帧转换和发送EthernetMAC,ADSL1硬件物理层介质及发送方式RS-232,Ethernet,ADSL数据传送文件传送文件内容传送文件段数据段数据包数据帧数据位成都信息工程学院16通信网络体系分层TCP/IP的分层是怎样的?物理层数据链路层IP(OSPF/RIP…)TCP/UDP/RTPSOCKET应用层TelnetHttpNFS数据库应用EthernetATM/FRSONET……物理层数据链路层IP(OSPF/RIP…)TCP/UDP/RTPSOCKETTelnetHttpNFS数据库应用物理层数据链路层IP(OSPF/RIP…)成都信息工程学院17什么是主机到主机的通信软件典型的主机—主机通信有那些通信?什么是主机?Browser浏览器WEB服务FOXMAILMAIL服务可以独立运行的计算机,由于历史的原因有时分配IP地址的网络设备也称为主机客户服务器成都信息工程学院18典型的主机—主机通信什么是主机到主机的通信软件HTTP会话WEB服务INTERNETWEB服务器LINUX工作站进程1(浏览器)进程2进程3进程4用户空间内核空间TCP/IP核心模块系统调用接口网络设备驱动程序网络设备驱动程序网络设备驱动程序成都信息工程学院19LINUX内核结构Linux设备管理结构用户空间内核空间成都信息工程学院20主机网络软件注重功能为了功能性不是为了性能把性能敏感的功能移动到核心空间而保留其它功能在用户空间主机到主机通信软件成都信息工程学院21典型的主机—主机通信什么是主机到主机的通信软件HTTP会话WEB服务INTERNETWEB服务器LINUX工作站进程1(浏览器)进程2进程3进程4用户空间内核空间TCP/IP核心模块网络设备驱动程序网络设备驱动程序网络设备驱动程序应用层和网络层(TCP/UDP)之间的接口--SOCKET有时也称API系统调用接口成都信息工程学院22•主机到主机的通信软件–主机之间的文件拷贝–TCP协议分层结构–TCP上进程通信模式–TCP-SOCKET函数–主机之间文件拷贝示例程序第四讲基于TCP-SOCKET的通信程序成都信息工程学院23应用举例--在两个主机之间拷贝二进制文件,文件名相同文件拷贝AAA二进制文件非常基本的应用层通信软件,复杂的网络应用软件基本原理也如此AAA二进制文件第四讲基于TCP-SOCKET的通信程序成都信息工程学院24SOCKET模型服务者进程2层设备层3、4层协议层SOCKET层以太网驱动程序TCPIP客户进程1层物理层2层设备层3、4层协议层SOCKET层以太网驱动程序TCPIP1层物理层第四讲基于TCP-SOCKET的通信程序成都信息工程学院25基于主机的通信TCPTCP客户临时端口TCP客户临时端口TCP客户临时端口主服务器TCP连接熟知端口仅用于接受服务请求创建从服务器进程主服务器有时又称为父服务器,而从服务器又称为子服务器。客户/服务器模型成都信息工程学院26基于主机的通信服务者进程SOCKET层SOCKET层服务者进程A复制创建A主机C主机服务者进程BSocket()connect()write()close()Socket()bind()listen()accept()read()close()TCPTCPTCP对等协议168.56.124.100666666666666客户进程7676客户/服务器模型B主机成都信息工程学院27LINUX进程和程序进程创建:fork,clone,vfork父子进程共享资源的形式•a.不共享(fork时缺省)•b.部分共享•c.完全共享(线程)进程的创建成都信息工程学院28LINUX进程和程序示例4-fork实例#includestdio.hIntmyvar=0;voidmain(){intpid;pid=fork();//systemcallif(pid0){//erroroccurredprintf(“forkfailed.”);exit(-1);//systemcall}elseif(pid==0){//childprocessprintf(“childprocessexecuting…\n”);myvar=1;}else{//parentprocesswait();//systemcall,waitforchildrencompletionprintf(“childcomplete.”);myvar++;printf(“father,myvar=%d”,myvar);exit(0);}}小于0等于0大于0E子进程父进程成都信息工程学院29•主机到主机的通信软件–主机之间的文件拷贝–TCP协议分层结构–TCP上进程通信模式–TCP-SOCKET函数–主机之间文件拷贝示例程序第四讲基于TCP-SOCKET的通信程序成都信息工程学院30SOCKET系统调用系统调用功能使用者Socket(format,type,protocol)获得一个SOCKET客户、服务者bind(sd,address,length)SOCKET和address绑定服务者listen(sd,qlength)设置倾听服务者accept(sd,address,addrlen)接受SOCKET请求服务者connect(sd,address,length)请求一个SOCKET连接客户send(sd,msg,length,flags)向SOCKET发送数据客户、服务者recv(sd,buf,length,flags)从SOCKET接收数据客户、服务者write(sd,buf,len)向SOCKET写数据客户、服务者read(sd,buf,len)从SOCKET读数据客户、服务者shutdown(sd,mode)关闭SOCKET客户、服务者close(sd)释放SOCKET客户、服务者第四讲基于TCP-SOCKET的通信程序成都信息工程学院31read(…)socket(…)若需要就重复write(…)close(…)客户connect(…)基于主机的通信找座位拨号呼叫说话听话挂机成都信息工程学院32socket(…)bind(…)accept(…)无限制重复进程close(…)listen(…)fork(…)write(…)read(…)close(…)若需要就重复主服务器close(…)接受从属服务器基于主机的通信服务器找座位设置服务类型监听接收呼叫找服务员新服务员关闭监听新服务员听话新服务员说话挂机服务员退出成都信息工程学院33read(…)socket(…)bind(…)accept(…)无限制重复socket(…)若需要就重复write(…)进程close(…)接受close(…)客户listen(…)fork(…)connect(…)write(…)read(…)close(…)监听若需要就重复主服务器close(…)接受从属服务器基于主机的通信服务器成都信息工程学院34上节课讲了什么?TCP/IP的地址IP地址,主机地址,网络地址端口号,端口号码,端口地址成都信息工程学院35上节课讲了什么?TCP/IP的通信模型–客户/服务器TCPTCP客户临时端口TCP客户临时端口TCP客户临时端口主服务器TCP连接熟知端口仅用于接受服务请求创建从服务器进程成都信息工程学院36上节课讲了什么?TCP/IP接口API库--socketsocket()系统调用socket()来获