如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
深圳华北工控股份有限公司实验五Linux网络编程之TCP一.实验目的学习和掌握linux下的UDP通信的基本原理和基本编程方法二.实验平台基于ATOMN270,NORCO(华北工控)EMB-3850嵌入式开发板Linuxredhatkernel-2.4嵌入式操作系统三.实验内容编写linux下UDP通信的程序四.参考资料1、Linux基础教程.吴学毅.北京交通大学出版社出版日期:2005年9月2、红帽企业Linux4X86-64体系安装指南3、RedHatEnterpriseLinux4SystemAdministrationGuide4、TCP/IP详解5、Linux中TCP/IP协议实现及嵌入式应用.张曦煌,北京航空航天大学出版社.出版时间:2008L五.实验原理网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端。在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。被动的等待外面的程序来和自己通讯的程序称为服务端程序。在网络应用中通信的两个进程间相互作用的主要模式是客户端/服务器模式(C/S模式),即客户向服务器发出请求,服务器接收到请求后提供相应的服务。C/S模式工作时要求有一套为客户机和服务器所共识的协议,在协议中有主从机之分。当服务器和应用程序需要和其它进程通信时就会创建套接口(socket),socket主要完成配套接口和初始化、完成连接的系统调用、传送数据以及关闭接口等工作。TCP(TransferControlProtocol)传输控制协议是一种面向连接的协议,当我们的网络程序使用这个协议的时候,网络可以保证我们的客户端和服务端的连接是可靠的、安全的。Linux系统是通过提供套接字(socket)来进行网络编程的,网络程序通过socket和其它几个函数的调用,会返回一个通讯的文件描述符,我们可以将这个描述符看成普通的文件的描述符来操作我们可以通过向-27-深圳华北工控股份有限公司描述符读写操作实现网络之间的数据交流。其中TCP通信常用的函数主要有以下几个:intsocket(intdomain,inttype,intprotocol)domain:说明网络程序所在的主机采用的通讯协族(AF_UNIX和AF_INET等)。AF_UNIX只能够用于单一的Unix系统进程间通信,而AF_INET是针对Internet的,因而可以允许在远程主机之间通信。type:网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM等)SOCK_STREAM表明我们用的是TCP协议,这样会提供按顺序的可靠、双向、面向连接的比特流。SOCK_DGRAM表明我们用的是UDP协议,这样只会提供定长的、不可靠、无连接的通信。Protocol:由于指定了type,所以这个地方我们一般只要用0来代替就可以了。socket为网络通讯做基本的准备,成功时返回文件描述符,失败时返回-1,看errno可知道出错的详细情况。intbind(intsockfd,structsockaddr*my_addr,intaddrlen)sockfd:是由socket调用返回的文件描述符。Addrlen:是sockaddr结构的长度。my_addr:是一个指向sockaddr的指针。由于我们主要使用Internet所以sin_family一般为AF_INET,sin_addr设置为INADDR_ANY表示可以和任何的主机通信,sin_port是要监听的端口号,sin_zero[8]是用来填充的。bind将本地的端口同socket返回的文件描述符捆绑在一起,成功是返回0。intlisten(intsockfd,intbacklog)sockfd:是bind后的文件描述符。backlog:设置请求排队的最大长度,当有多个客户端程序和服务端相连时,使用这个表示可以介绍的排队长度。-28-深圳华北工控股份有限公司listen函数将bind的文件描述符变为监听套接字,返回的情况和bind一样。intaccept(intsockfd,structsockaddr*addr,int*addrlen)sockfd:是listen后的文件描述符。addr,addrlen:是用来给客户端的程序填写的,服务器端只要传递指针就可以了。bind、listen和accept是服务器端用的函数,accept调用时服务器端的程序会一直阻塞到有一个客户程序发出了连接。accept成功时返回最后的服务器端的文件描述符,这个时候