《《操作系统原理》实验9--Linux多线程文件传输实现.docx》由会员分享,可在线阅读,更多相关《《操作系统原理》实验9--Linux多线程文件传输实现.docx(6页珍藏版)》请在优知文库上搜索。
1、操作系统原理实验报告实验序号:9实验项目:LinUX多线程文件传输实现学号姓名专业、班级实验地点指导教师实验时间一、实验目的及要求通过本实验的综合实践,使学生掌握LinUX多线程、SOCkel编程和文件系统操作等多项知识。二、实验设备(环境)及要求VMware虚拟机软件,Ubuntu系统三、实验内容与步骤包括服务器和客户端两部分。1服务器端创建监听与文件管理服务器负责的功能模块主要有两部分,一是对连接进来客户端所有线程的管理和服务器目录下的文件管理;二是创建线程来单独监听客户端的动作。为了便于管理,创建两个user.txt和client.txt两个文档来分别负责服务器的连接和客户端的连接。US
2、er.lxt中存放了服务器名和密码。Client.txt存放了连接客户端名字和密码。首先对服务器的创建有个监测,即在启动时先核实服务器的所有者username和密码PaSSWord,将输入的用户、密码与user.txt中的用户密码比较,匹配成功则同意启动,否则return-1表失败。接着创建一个SOCket套接口,绑定IP设置客户端的最大连接数为10,然后创建一个SeVer线程来实现对服务器本身监听动作。接下来创建线程完成对客户端的监听监听等待连接:while(l)sockdata=accept(sockfd,(structsockaddr*)0,(int*)0);我们定义结构体:struct
3、client_t(pthread_ttid;intconn_fd;intused;charname20;p_client10;来存放每个客户端的SoCket信息、线程标识、使用号、连接号和客户名。创建线程实现单独监听:p_clientfi.conn_fd=sockdata;p_clienti.used=i;strcpy(p_clienti.name,client_name);pthread_create(&p_clienti.tid,NULL,&client_conn,&p_clienti)接下来是线程Cliem_conn()的功能监听客户端的功能完成。2客户端连接与文件传输在客户端这边同样适
4、用了检测机制,运行客户机时要将用户名、密码以及ip地址和端口号作为参数输进来,先建立与服务器的连接,然后将用户名和密码发送到服务端检测,如果检测失败则接收到一条拒绝信息,连接断开,如果检测成功则接收到一条确认信息,双方通信开始。3实现步骤基于多线程的TCP套接字文件传输通信工作流程图,如图1所示。通信工作的大致流程:1) 服务器先用SoCket()函数来建立一个套接口,用这个套接口完成通信的监听及数据的收发。2) 服务器用bind()函数来绑定一个端口号和ip地址,是套接口与指定的端口号和ip关联。3) 服务器调用IiSten()函数,是服务器的端口和IP处于监听状态,等待网络中某一个客户机的
5、连接请求。4) 客户机用SoCket()函数建立一个套接口,设定远程ip和端口5) 客户机调用ConneCto函数连接远程计算机指定的端口。6) 服务器调用accept。函数来接受远程计算机的连接请求,建立起与客户机之间的通信连接。7) 建立连接之后,客户机用Write()函数(或Send()想socket中写入数据。也可以用read。函数(或recv()函数)赌气服务器发送来的数据。8) 服务器用read。函数(或recv()函数)来读取客户机发来的数据,也可以用Write()函数(或Send()函数)来发送数据。9) 完成通信以后,使用ClOSe()函数关闭socket连接。客户机进程服务
6、器进程图1TCP套接字通信工作实验步骤与结果:0ubuntu:/test_Ex/ex9/client$./client192.168.111.15*I-UpFile 2-DownFtle 3-FtIeLtst 4-Discoect* ase Input the Id: ubuntu:/test_Ex/ex9/server$ ./server ver: got connection from 192.168.111.15以上两图是客户端和服务器建立连接后,双方的状态。0ubuntu:/test_Ex/ex9/cltent$ ./client 192.168.111.15 *I-UpFtle 2-
7、DownFfle 3-FileList 4-Dtsconect*ase Input the Id: eKist:Io. c t2.hex5.cex4.cshare.c ex6 3.shubuntu:*/test_Ex/ex9/server$ ./server er: got connection from 192.168.ill.15 nt 192.168.111.15 : Request for FileList.以上两图是客户端要求显示文件列表的操作。*I-UpFtle 2-DownFtle 3-FUeLtst 4-Disconnect*PleaseInputtheId:2pleasein
8、putFtleNamethatyouwanttodownload:ex4.c12410241241ubuntu:/test_Ex/ex9/server$./serverer:gotconnectionfrom192.168.111.15et192.168.111.15:RequestforFileList.Ilelistex4.c444ex4.cExex9clientOclientfindHncltineIlinclIcliet.c以上三张图是客户端请求下载服务器上的文件的操作,数字代表传输的数据量的直接大小。不过有bug,就是文件是存在了,但是文件内容却是空的。服务器传输过来的字节没有写入在
9、客户端生成的文件中,一直在查找这个bug的问题。咆UbUntU:八esJExex9cltent5./client192.168.111.15*I-UpFlle* 2-DowFxT *3.FtXeList* 4-dXscoct*?aseInputtheId:4dByte!IbUnt一testExex9cIient$ubuntu:/test_Ex/ex9/server$./serverer:gotconnectionfrom192.168.111.15?nt192.168.111.15:RequestforFileList.Ilelistex4.c14er: got connection ?nt 192.168.111.15from 192.168.111.15 :is disconnect.以上两张图是客户端,服务器断开连接后的状态。四、分析与讨论这是本学期比较大型的实验,涉及到了个功能的实际应用,特别是通信方面的,还应该继续深入研究。五、教师评语签名:口期:成绩