当前位置: 代码迷 >> J2SE >> 大公司的一道下机题,请高手帮忙看看
  详细解决方案

大公司的一道下机题,请高手帮忙看看

热度:5150   发布时间:2013-02-25 00:00:00.0
大公司的一道上机题,请高手帮忙看看
两个服务器提供文件共享服务。 

1. 服务器A和服务器B提供文件上传下载服务。服务器A是主服务器,服务器B是备用服务器。 
2. 有5个客户端同时上传不同的大文件(200M~500M),当上传开始1分钟后随意启动N个客户端(命令行输入),每个客户端在这5个上传中的文件中随机选择一个文件下载 
3. 中间突然停掉服务器A并保持服务器B继续服务 

整个过程能顺利进行,所有下载的文件是完整并且正确的。请用Java编写,不用写界面。 

请高手给点思路,thankyou。

------解决方案--------------------------------------------------------
1. 服务器A和服务器B提供文件上传下载服务。服务器A是主服务器,服务器B是

备用服务器

客户端如果是网络分布,那么你需要采用分布式来做,说白了就是一个服务器核心服务器提供任务部署,第二个服务器是为了防止意外情况的备用服务器。

2. 有5个客户端同时上传不同的大文件(200M~500M),当上传开始1分钟后随意启动N个客户端(命令行输入),每个客户端在这5个上传中的文件中随机选择一个文件下载

这里你用线程异步来做,主要是处理I/O的并发任务,也没什么。

3. 中间突然停掉服务器A并保持服务器B继续服务

主服务器出现异常,那么需要将主服务器的数据拷贝到备用服务器上,当然主服务器处理任务的时候需要备份副本,出现异常也就自动移动到备用服务器继续服务。
------解决方案--------------------------------------------------------
要写一个发送端和一个接收端
同时监听线程
这样就可以实现
------解决方案--------------------------------------------------------
写了个简单的,也没写完,用socket和IO写的
Java code
import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server {    private ServerSocket serverSocket = null;    private Socket socket = null;    public void getFile(int port) {        try {            serverSocket = new ServerSocket(port);            System.out.println("server start....");            while (true) {                socket = serverSocket.accept();                System.out.println(socket.getInetAddress()                        + " is connected the server...");                Thread serverThread = new ServerThread(socket);                serverThread.start();            }        } catch (IOException e) {            e.printStackTrace();        }    }    class ServerThread extends Thread {        private Socket socket;        public ServerThread(Socket socket) {            this.socket = socket;        }        public void run() {            File file = null;            DataInputStream in = null;            DataOutputStream out = null;            try {                in = new DataInputStream(socket.getInputStream());                out = new DataOutputStream(socket.getOutputStream());                if (in.readChar() == '?') {                    downloadFile(in, out, file);                } else {                    uploadFile(in, out, file);                }            } catch (IOException e) {                e.printStackTrace();            } finally {                try {                    if (in != null)                        in.close();                    if (out != null)                        out.close();                    if(socket!=null){                        socket.close();                    }                } catch (IOException e) {                    e.printStackTrace();                }            }        }        public void uploadFile(DataInputStream in, DataOutputStream out,                File file) {            try {                String fileName = null;                StringBuffer stringBuffer = new StringBuffer();                char c = '\\';                while ((c = in.readChar()) != '\\') {                    stringBuffer.append(c);                }                fileName=stringBuffer.toString().substring(0, stringBuffer.length());                file = new File("e:\\back\\" + fileName);                                long pointer=in.readLong();                out.writeLong(file.length());                                if(file.length()==0){                    out.write(-1);                }else if(file.length()-pointer > -1){                    in = new DataInputStream(new FileInputStream(file));                                        int i = -1;                    byte[] buffer = new byte[1024*512];                    while ((i = in.read(buffer)) != -1) {                        out.write(buffer, 0, i);                        pointer+=i;                    }                    out.write(-1);                }else{                    out.write(-1);                }            } catch (IOException e) {                e.printStackTrace();            } finally {                try {                    if (in != null)                        in.close();                    if (out != null)                        out.close();                    if(socket!=null){                        socket.close();                    }                } catch (IOException e) {                    e.printStackTrace();                }            }        }        public void downloadFile(DataInputStream in, DataOutputStream out,                File file) {            try {                String fileName = null;                StringBuffer stringBuffer = new StringBuffer();                char c = '\\';                while ((c = in.readChar()) != '\\') {                    stringBuffer.append(c);                }                fileName = socket.getInetAddress() + "-"                        + stringBuffer.toString();                file = new File("e:\\back\\" + fileName);                out.writeLong(file.length());                out = new DataOutputStream(new FileOutputStream(file, true));                int i = -1;                byte[] buffer = new byte[1024];                while ((i = in.read(buffer)) != -1) {                    out.write(buffer, 0, i);                }            } catch (IOException e) {                e.printStackTrace();            } finally {                try {                    if (in != null)                        in.close();                    if (out != null)                        out.close();                    if(socket!=null){                        socket.close();                    }                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}
  相关解决方案