基于socket的简单文件传输系统

【实验目的及要求】

Uinx/Linux/Windows 环境下通过 socket 方式实现一个基于 Client/Server 文件传输程序。

【实验原理和步骤】

1. 确定传输模式:通过 socket 方式实现一个基于 Client/Server P2P 模式的文件传输程序。

2. 如果选择的是 Client/Server 模式的文件传输程序,则需要分别实现客户端和服务器端程序。客户端:用面向连接的方式实现通信。采用 Socket 类对象,接收服务器发送的文件并保存在特定的位置。服务器端:监听客户请求,读取磁盘文件并向客户端发送文件。注意:需要实现文件的读写操作。


【方案设计】


1)编写基于socket的文件传输系统中的public class server

2)将server中需要调用到的类与方法集合在public class FileTransfer extends Thread中;

3)在FileTransfer中完成ReceiveFile()SendFile()方法的声明;

4)编写客户端程序 public class client,在类client中完成主要用到的方法DownloadFile()UploadFile()方法的声明;

5)在ubuntu虚拟终端中利用java虚拟机对程序进行运行调试。



【实验环境】

ubuntu 12.04

java version "1.7.0_17"

Eclipse Platform Version: 4.2.1

 

怪无聊的,最初想写的是p2p文件分享系统,结果项目老师一个催促,让我心跳加快=。=什么都顾不上了,草草了事。。。不说废话了,这实验不难,直接上源码。

server

 

 1 import java.io.BufferedReader;
 2 import java.io.DataInputStream;
 3 import java.io.DataOutputStream;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.net.ServerSocket;
 7 import java.net.Socket;
 8 
 9 /**
10  * Server of a file sharing system based on socket
11  * @author alex
12  *
13  */
14 
15 public class server {
16 
17     
18     public static void main(String[] args) throws IOException{
19         int PortNum;
20         InputStreamReader is=new InputStreamReader(System.in);
21         BufferedReader br=new BufferedReader(is);
22         System.out.print("Enter the port number: ");
23         PortNum=Integer.parseInt(br.readLine().trim());
24         ServerSocket ss=new ServerSocket(PortNum);
25         while(true){
26             System.out.println("Server get ready at port "+PortNum+"\nWaiting for connection");
27             FileTransfer ft=new FileTransfer(ss.accept());
28         }
29     }
30     
31 }
View Code

 

 

FileTransfer

  1 import java.io.DataInputStream;
  2 import java.io.DataOutputStream;
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileOutputStream;
  6 import java.io.IOException;
  7 import java.net.Socket;
  8 
  9 /**
 10  * FileTransfer of a file sharing system based on socket, of which the methods are used in the server
 11  * @author alex
 12  *
 13  */
 14     public class FileTransfer extends Thread{
 15 
 16         DataInputStream dis;
 17         DataOutputStream dos;
 18         Socket client_socket;
 19         
 20         public FileTransfer(Socket socket){
 21             client_socket=socket;
 22             try {
 23                 dis=new DataInputStream(client_socket.getInputStream());
 24                 dos=new DataOutputStream(client_socket.getOutputStream());
 25                 System.out.println("Socket connected");
 26                 start();
 27             } catch (IOException e) {
 28                 e.printStackTrace();
 29             }
 30             
 31         }
 32         
 33         
 34         public void run(){    
 35             System.out.println("Connection Established");
 36             while(true){
 37                 System.out.println("Waiting for client command... ");
 38                 String cd;
 39                 try {
 40                     cd = dis.readUTF();
 41                     if(cd.equalsIgnoreCase("DOWNLOAD")){
 42                         System.out.println("Client requests to download");
 43                         SendFile();
 44                     }
 45                     else if(cd.equalsIgnoreCase("UPLOAD")){
 46                         System.out.println("Client requests to upload");
 47                         ReceiveFile();
 48                     }
 49                     else if(cd.equalsIgnoreCase("DISCONNECT")){
 50                         System.out.println("Connection shutdown...");
 51                         System.exit(1);
 52                     }
 53                 } catch (IOException e) {
 54                     e.printStackTrace();
 55                 }
 56             }
 57             
 58         }
 59 
 60 
 61         private void ReceiveFile() {
 62             try {
 63                 String write;
 64                 String filename=dis.readUTF();
 65                 File f=new File(filename);
 66                 if(f.exists()){
 67                     dos.writeUTF("File Already Existed");
 68                     write=dis.readUTF();
 69                 }
 70                 else write="Y";
 71                 if(write.equalsIgnoreCase("Y")){
 72                     int ch;
 73                     FileOutputStream fout=new FileOutputStream(f);
 74                     String ttt;
 75                     do{
 76                         ttt=dis.readUTF();
 77                         ch=Integer.parseInt(ttt);
 78                         fout.write(ch);
 79                     }while(ch!=-1);
 80                     fout.close();
 81                     dos.writeUTF("File Uploaded");
 82                 }
 83                 else return;
 84             } catch (IOException e) {
 85                 e.printStackTrace();
 86             }
 87             
 88         }
 89 
 90 
 91         private void SendFile() throws IOException {
 92             String filename=dis.readUTF();
 93             File f=new File(filename);
 94             if(!f.exists()){
 95                 dos.writeUTF("File Not Existed");
 96                 return;
 97             }else{
 98                 dos.writeUTF("Dowloading File "+filename);
 99                 FileInputStream fin=new FileInputStream(f);
100                 int ch;
101                 do{
102                     ch=fin.read();
103                     dos.writeUTF(String.valueOf(ch));
104                 }while(ch!=-1);
105                 fin.close();
106                 dos.writeUTF("File "+filename+" Download Successfully");
107             }
108             
109         }
110         
111     }
View Code

 

client

  1 import java.io.BufferedReader;
  2 import java.io.DataInputStream;
  3 import java.io.DataOutputStream;
  4 import java.io.File;
  5 import java.io.FileInputStream;
  6 import java.io.FileOutputStream;
  7 import java.io.IOException;
  8 import java.io.InputStreamReader;
  9 import java.net.InetAddress;
 10 import java.net.Socket;
 11 import java.net.UnknownHostException;
 12 
 13 
 14 /**
 15  * Client of a file sharing system based on socket
 16  * @author alex
 17  *
 18  */
 19 public class client {
 20     int PortNum;
 21     BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
 22     DataInputStream dis;
 23     DataOutputStream dos;
 24     
 25     public client() throws UnknownHostException, IOException{
 26         System.out.println("Enter the port number:");
 27         PortNum=Integer.parseInt(bf.readLine().trim());
 28         Socket soc=new Socket(InetAddress.getByName("localhost"),PortNum);
 29         dis=new DataInputStream(soc.getInputStream());
 30         dos=new DataOutputStream(soc.getOutputStream());
 31     }
 32     
 33     public static void main(String[] args) throws UnknownHostException, IOException {
 34         client MyClient=new client();
 35         String option;
 36         while(true){
 37             option=MyClient.display();
 38             switch(option){
 39             case "1":    MyClient.DownloadFile();break;
 40             case "2":    MyClient.UploadFile();break;
 41             case "3":    MyClient.Disconnect();break;
 42                 default: break;
 43             }
 44         }
 45     }
 46     
 47     public String display() throws IOException{
 48         System.out.println("Choose the operation you want to make:");
 49         System.out.println("1.Download A File");
 50         System.out.println("2.Upload A File");
 51         System.out.println("3.Disconnect");
 52         String op=bf.readLine();
 53         return op;
 54     }
 55     
 56     public void UploadFile() throws IOException{
 57         System.out.println("Enter the file name");
 58         String filename=bf.readLine().trim();
 59         File f=new File(filename);
 60         String msg,write;
 61         if(!f.exists()){
 62             System.out.println("The File "+ filename+" Not Found!");
 63             return;
 64         }
 65         else{
 66             dos.writeUTF("UPLOAD");
 67             dos.writeUTF(filename);
 68             msg=dis.readUTF();
 69             if(msg.equalsIgnoreCase("File Already Existed")){
 70                 System.out.println("File Already Existed On Server, Do You Want To Overwrite it?(Y/N)");
 71                 write=bf.readLine();
 72             }
 73             else write="Y";
 74             dos.writeUTF(write);
 75             if(write.equalsIgnoreCase("Y")){
 76                 System.out.println("Uploading File "+filename);
 77                 FileInputStream fin=new FileInputStream(f);
 78                 int ch;
 79                 do{
 80                     ch=fin.read();
 81                     dos.writeUTF(String.valueOf(ch));
 82                 }while(ch!=-1);
 83                 fin.close();
 84                 System.out.println(dis.readUTF());
 85             }
 86         }
 87     }
 88     public void DownloadFile() throws IOException{
 89         System.out.println("Enter the file name");
 90         String filename=bf.readLine().trim();
 91         String msg,write;
 92         dos.writeUTF("DOWNLOAD");
 93         dos.writeUTF(filename);
 94         msg=dis.readUTF();
 95         if(msg.equalsIgnoreCase("File Not Existed")){
 96             System.out.println("File "+filename+" Not Found On Server");
 97             return;
 98         }else{
 99             System.out.println(msg);
100             File f=new File(filename);
101             FileOutputStream fo=new FileOutputStream(f);
102             int ch;
103             String ttt;
104             do{
105                 ttt=dis.readUTF();
106                 ch=Integer.parseInt(ttt);
107                 fo.write(ch);
108             }while(ch!=-1);
109             fo.close();
110             System.out.println(dis.readUTF());
111             return;
112         }
113             
114     }
115     public void Disconnect() throws IOException{
116         dos.writeUTF("DISCONNECT");
117         System.exit(1);
118     }
119 }
View Code

 

 

转载于:https://www.cnblogs.com/alex-wood/p/3748781.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postgresql的HashJoin状态机流程图整理

状态机 可以放大观看。 HashJoinState Hash Join运行期状态结构体 typedef struct HashJoinState {JoinState js; /* 基类;its first field is NodeTag */ExprState *hashclauses;//hash连接条件List *hj_OuterHashKeys; /* 外表条件链表;list of …

JqueryUI入门

Jquery UI 是一套开源免费的、基于Jquery的插件,在这里记录下Jquery UI 的初步使用。 第一、下载安装 下载Jquery,官网:http://jquery.com;  下载Jquery UI,官网:http://jqueryui.com/ Jquery的部署就不说了,说下Jqu…

IO多路复用的三种机制Select,Poll,Epoll

IO多路复用的本质是通过系统内核缓冲IO数据让单个进程可以监视多个文件描述符,一旦某个进程描述符就绪(读/写就绪),就能够通知程序进行相应的读写操作。 select poll epoll都是Linux提供的IO复用方式,它们本质上都是同步IO,因为它…

qt中按钮贴图

一.QT之QPushButton按钮贴图 二.QT之QToolButton按钮贴图 一.QT之QPushButton按钮贴图具体操作流程 1. Qt Designer中拖入一Tool Button 2. 选择图标的图片放入工程目录下,如放在Resources内 3. 双击工程的Resource Files下的qrc文件,如图 4. 在弹出的窗…

Android Activity类讲解(一)

--by CY[kotomifigmail.com] 1.protected void onCreate(Bundle savedInstanceState) { throw new RuntimeException("Stub!");   } 当创建一个Activity时,系统会自动调用onCreate方法来完成创建工作.该创建工作包括布…

Mysql的undo、redo、bin log分析

目录关于undo log关于redolog关于binlog一个事务的提交流程undo log :记录数据被修改之前的样子 redo log:记录数据被修改之后的样子 bin log:记录整个操作。 关于undo log 关于undo log: 在执行一条涉及数据变更的sql时,在数据…

JPA概要

本文最新版已更新至:http://thinkinside.tk/2012/12/30/JPA.html JPA定义了Java ORM及实体操作API的标准。本文摘录了JPA的一些关键信息以备查阅。 如果有hibernate的基础,通过本文也可以快速掌握JPA的基本概念及使用。 Table of Contents 1 JPA概述2 实…

如何配置能让fiddler抓去https的请求?

1、打开fiddler,>>Tools>>Fiddler Options, 打开如图所示的HTTPS配置项:点击Export Rppt Certifica to Desktop :桌面上多了一个证书:下面就是将证书导入:点击开始-运行,输入:mmc,…

【闲聊】Baidu Map,excellent !!!Diaoyv island is China 's

【钓鱼岛】钓鱼岛是中国的!Diaoyu Islands are Chinas! 釣魚島は中国のアール! ————————————youngLaker转载于:https://www.cnblogs.com/younglaker/archive/2012/12/31/2840190.html

08:vigenère密码_密码技术:Vigenére密码,Playfair密码,Hill密码

08:vigenre密码1)Vigenre密码 (1) Vigenre Cipher) This technique is an example of Polyalphabetic Substitution technique which uses 26 Caesar ciphers make up the mono-alphabetic substitution rules which follow a count shifting mechanism from 0 to 25. That is,…

node oauth2验证_如何设置和使用护照OAuth Facebook身份验证(第2部分)| Node.js

node oauth2验证In my last article (How to set up and use passport OAuth Facebook Authentication (Section 1) | Node.js), we looked at another form of authentication called the OAuth authentication which involves sign in or signup using social media. 在我的上…

东哥读书小记 之 《一个广告人的自白》

掰着指头一算,端午假期确实完成不少事情,过的太尼玛充实鸟:去健身房2小时,且老夫的平板支撑终于能坚持超过1分钟,普大喜奔有木有;给合租的室友买蛋糕过了个生日;去 去哪儿 参加W3ctech的技术交流…

Redis的文件事件与时间事件处理

目录文件事件处理事件类型客户端和服务端的通信过程时间事件处理执行器执行周期性事件作用事件的调度与执行文件事件处理 Redis基于Reactor模式开发了文件事件处理器。文件事件处理器以单线程方式运行,通过IO多路复用程序监听多个套接字,实现了高性能网…

Linux SPI框架

水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7733476 Linux的SPI子系统采用主机驱动和外设驱动分离的思想,首先主机SPI控制器是一种平台设备,因此它以platform的方式注册进内…

重构——解决过长参数列表(long parameter list)

目录1、Replace Param with Query2、Preserve Whole Object3、Introduce Param Object4、Remove Flag Argument5、Combine Functions into ClassReference当我们需要在超长函数中提炼子函数时,如果函数内有大量的参数和临时变量,这将会对函数的提炼形成很…

从uptime、stress、mpstat、pidstat观察CPU密集型、IO密集型、进程密集型切换的系统性能

uptime dyydyy-Lenovo-ThinkBook-14-IIL:~$ uptime10:27:10 up 7 min, 1 user, load average: 1.32, 0.99, 0.49结果分别对应:当前时间、系统运行时间、当前用户数目、过去 1 分钟、5 分钟、15 分钟的平均负载(Load Average) 平均负载是指单位时间内&#xff0c…

多台计算机共享内存_共享内存多处理器和指令执行| 计算机架构

多台计算机共享内存共享内存多处理器 (Shared Memory Multiprocessor) There are three types of shared memory multiprocessor: 共有三种类型的共享内存多处理器: UMA (Uniform Memory Access) UMA(统一内存访问) NUMA (Non- uniform Memory Access) NUMA(非统一…

方法重写,隐藏在子类父类中的各种调用实践

一.子类和父类方法之间的关系 1.当子类和父类有方法完全相同的方法 namespace ConsoleApplication2 {class Program{static void Main(string[] args){B b new B();A a new A();A c new B();b.Show();a.Show();c.Show();Console.Read();}}public class A{public void Show()…

(解决)从同事那里取来的工程不能编译运行,出现以下错误,求帮助

错误 6 未能从程序集 C:\Program Files (x86)\MSBuild\Microsoft\Silverlight for Phone\v4.0\Microsoft.Phone.Build.Tasks.dll 加载任务“Microsoft.Phone.Build.Tasks.ValidateWMAppManifest”。 Could not load file or assembly Microsoft.Build.Utilities, Version2.0.0…

vmstat、sysbench、/proc/interrupts,性能压测

如何查看系统的上下文切换情况 vmstat 是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数。 # 每隔 5 秒输出 1 组数据 vmstat 5procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r …