资源描述
学 号姓 名专业、班实验地点实 1-416指导教师实验时间2015.12.15一、实验目的及要求通过本实验的综合实践,使学生掌握Linux多线程、socket编程和文件系统操作等多项知识。以学生自主训练为主的开放模式组织教学二、实验设备(软硬件环境)及要求安装后Ubuntu系统的VMWare三、实验内容与步骤实验内容:Linux多线程文件传输实现实验步骤:包括服务器和客户端两部分。?6.1服务器端创建监听与文件管理服务器负责的功能模块主要有两部分, 一是对连接进来客户端所有线程的管理和服务器目录下的文件管理;二是创建线程来单独监听客户端的动作。为了使于管理,创建两个user.txt和client.txt两个文档来分别负责服务命的连接和客户端的连接。user.txt中存放了服务器名和密码。client.txt 存放了连接客 户端名字和密码。首先对服务器的创建有个监测,即在启动时先核实服务器的所有者 username 和密码password,将输入的用户、密码与user.txt中的用户密码比较,匹配成 功则同思启动,否则return -1 表失败。接意创建一个socket套接口,绑止Ip设置客户端的最大连接数为10,然后创建一个sever线程来实现对服务器本身监听动作。接卜来创建线程完成对客户端的监听监听等待连接:while(1)实验序号:9操作系统实验报告实验项目名称:Linux多线程文件传输实现sockdata = accept(sockfd,(struct sockaddr*)0,(int*)0);我们定义结构体:struct client_tpthread_t tid;int conn_fd;int used;char name20;p_client10;来存放每个客户端的socket信息、线程标识、使用号、连接号和客户名。创建 线程实现单独监听:p_clienti.conn_fd = sockdata;p_clienti.used = i;strcpy(p_clienti.name , client_name);pthread_create(&p_clienti.tid,NULL,&client_conn,&p_clienti)接下来是线程client conn()的功能监听客户端的功能完成。?6.2客户端连接与文件传输在客户端这边同样适用了检测机制,运行客户机时要将用户名、密码以及ip 地址和端口号作为参数输进来,先建立与服务器的连接,然后将用户名和密码发 送到服务端检测,如果检测失败则接收到一条拒绝信息, 连接断开,如果检测成 功则接收到一条确认信息,双方通信开始。?6.3实现步骤基于多线程的TCP套接字文件传输通信工作流程图,如图 1所示。通信工作的大致流程:1) 服务器先用socket()函数来建立一个套接口,用这个套接口完成通2) 服务器用bind()函数来绑定一个端口号和ip地址,是套接口与指定的端口号和ip关联。3) 服务器调用listen()函数,是服务器的端口和Ip处于监听状态,等待网络中某一个客户机的连接请求。4) 客户机用socket()函数建立一个套接口,设定远程ip和端口5) 客户机调用connect。函数连接远程计算机指定的端口。6) 服务器调用accept()函数来接受远程计算机的连接请求,建立起与客户机之间的通信连接。7) 建立连接之后,客户机用 write()函数(或send()想socket中写入数据。也可以用read()函数(或recv()函数)赌气服务器发送来的数据。8) 服务器用read()函数(或recv()函数)来读取客户机发来的数据,也可以用write()函数(或send()函数)来发送数据。9) 完成通信以后,使用close()函数关闭socket连接。客户机进程服务器进程图1 TCP套接字通信工作四、实验结果、数据处理与过程截图1 .打开两个终端分别作为服务器端和客户端2 .在服务器端程序编译gcc -o server server.c服务器端程序的运行,在一个终端执行./ servenlngmo(aut)untu :vl client.cnlngmogubuntu:gcc -o client client.cningmogubuntu:S ./client 127.0.0.1Please Input File Name On Server:shFile:5h Can Not Open To Write3 .在客户端程序编译gcc -o client client.c客户端程序的运行,在另一个终端中执行./client 127.0.0.1 (通过 127.0.0.1 访问自己)ningmoubuntui:-/tSt/test9$ vi sarver.cningmoubuntu:*/test/test9$ gcc -o server server.c ningmoubuntu:/test/test9$ /serverFile:sh Not Found因sh文件目录不在服务器下所以传送失败4 .传送服务器下的test.txt 文件ningmoubuntu:J client 127.6,9.1Please Input File Name On Server:test.txtRecieve File:test.txt From Server127,0,0,1 Finishedningmoubuntu:Is 54 Desktoprect.shtest,txt传送成功,test.txt文件出现在客户端的目录下iingnoubuntu:-/test/test9s Is server server.c test * txt ingmoubuntu:-/test/test9s ./server file_block_length = 6 FiLe;test,txt Transfer Finished五、思考题六、教师评语成绩签名:日期:
展开阅读全文