用java在客户端读取mongodb中的数据并发送至服务器

使用Java自带的socket端口来实现,程序如下:

Client.java

package com.cn.gao;

import java.net.*;

import java.io.*;



import com.mongodb.*;

/**

 * 客户端发送消息给服务器

 * @author hadoop

 *

 */

public class Client {

    private Socket client;

    private boolean connected;

    //客户端构造函数

    public Client(String host,int port){

            try {

                client = new Socket(host,port);

                System.out.println("连接服务器成功!");

                this.connected = true;

            } catch (UnknownHostException e) {

                System.out.println("无法解析主机名!");

                this.connected = false;

            } catch (IOException e) {

                System.out.println("输入输出错误!");

                this.connected = false;

                closeSocket();

            }        

    }

    //判断是否连接

    public boolean isConnected(){

        return connected;

    }

    //设置连接状态

    public void setConnected(boolean connected){

        this.connected = connected;

    }

    /**

     * 发送数据到端口

     * @param dbname mongodb数据库名字

     * @param collectionName 该数据库中要发送数据的collection名

     */

    public void sendFile(String dbname,String collectionName){

        DataOutputStream dos = null; 

        DataInputStream dis = null;  

        if(client==null) return;

        //从mongodb数据库中读取数据

        Mongo connection = new Mongo("localhost:27017");

        DB db = connection.getDB(dbname);

        DBCollection input = db.getCollection(collectionName);

/*        BasicDBObject condition=new BasicDBObject();//条件  

        BasicDBObject key=new BasicDBObject("vtext",2);//指定需要显示列 

        DBCursor cur = input.find(condition,key);*/

        DBCursor cur = input.find();

        try {

            while(cur.hasNext()){

                DBObject document = cur.next();

                dis = new DataInputStream(new ByteArrayInputStream(document.toString().getBytes()));

                dos = new DataOutputStream(client.getOutputStream());

                int bufferSize = 10240;

                byte[] buf = new byte[bufferSize];

                int num =0;

                while((num=dis.read(buf))!=-1){

                    System.out.println(new String(buf));

                    dos.write(buf, 0, num);

                }

                dos.flush();

            }

            System.out.println("传输成功!");

        } catch (IOException e) {

            e.printStackTrace();

//            System.out.println("输入输出错误!");

            closeSocket();

        } finally{

            try {

                if(dis!=null) dis.close();

                if(dos!=null) dos.close();

            } catch (IOException e) {

                e.printStackTrace();

//                System.out.println("输入输出错误!");

            }

        }



    }



    //关闭客户端

    public void closeSocket(){

        if(client!=null){

            try {

                client.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

    /**

     * @param args

     * 参数格式如下

     * hostname dbname collectionName

     */

    public static void main(String[] args){

        //默认端口为8888

        if(args.length!=3){

            System.out.println("参数格式不对!");

            return;

        }

        String hostName = args[0];

        int port = 8888;

        Client client = null;

        client = new Client(hostName,port);

        String dbname = args[1];

        String collectionName = args[2];

        if(client.isConnected()){

            client.sendFile(dbname, collectionName);

            client.closeSocket();

        }

        

    }

}

Server.java

package com.cn.gao;

import java.io.*;

import java.net.*;



/**

 * 服务器端

 * @author hadoop

 *

 */

public class Server {

    private int port;

    private String host;

    private static ServerSocket server;

    

    public Server(int port){

        this.port = port;

        this.server = null;

    }

    

    public void run(){

        if(server==null){

            try {

                server = new ServerSocket(port);

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

        System.out.println("服务已启动...");

        while(true){

            try {

                Socket client = server.accept();

                if(client==null) continue;

            new SocketConnection(client).run();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

    

    

    public class SocketConnection extends Thread{

        private Socket client;    

        public SocketConnection(Socket client){

            this.client = client;

        }

        

        public void run(){

            if(client==null) return;

            DataInputStream in= null; 

            boolean flag = true;

            try {

                while(flag){

                in = new DataInputStream(new BufferedInputStream(client.getInputStream()));

                 int bufferSize = 10240;

                    byte[] buf = new byte[bufferSize];

                    int num =0;

                    while((num=in.read(buf))!=-1){        

                        System.out.println(new String(buf));

                    }

                }

            } catch (IOException e) {

                e.printStackTrace();

            } finally{

                try {

                    if(in!=null)  in.close();

                    client.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

    

    

    public static void main(String[] args){

        int port = 8888;

        new Server(port).run();

    }

}

 

你可能感兴趣的:(mongodb)